home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #2 / Amiga Plus CD - 1995 - No. 2.iso / internet / faq / englisch / medicalimageformat < prev    next >
Encoding:
Text File  |  1995-04-11  |  189.0 KB  |  4,572 lines

  1. Archive-name: medical-image-faq/part1
  2. Posting-Frequency: monthly
  3. Last-modified: Sat Feb 18 16:42:58 GMT+0300 1995
  4. Version: 2.01
  5.  
  6. This message is automatically posted once a month to help readers looking
  7. for information about medical image formats. If you don't want to see this
  8. posting every month, please add the subject line to your kill file.
  9.  
  10. Contents:
  11.  
  12.     part1    - contains index, general information & standard formats
  13.     part2    - contains standard formats (continued)
  14.     part3    - contains information about proprietary CT formats
  15.     part4    - contains information about proprietary MR formats
  16.     part5    - contains information about proprietary other formats
  17.     part6    - contains information about hosts & compression
  18.     part7    - contains information sources
  19.     part8    - contains information sources (continued)
  20.  
  21. Tools that describe and convert many of the formats described in this document 
  22. are available in the dicom3tools package from
  23.  
  24.     "ftp://ftp.rahul.net/pub/dclunie/".
  25.  
  26. A Mosaic browsable version of this FAQ is available at:
  27.  
  28.     "http://www.rahul.net/dclunie/medical-image-faq/html/".
  29.  
  30. Html, postscript and text forms of the FAQ are available at:
  31.  
  32.     "ftp://ftp.rahul.net/pub/dclunie/medical-image-faq/".
  33.  
  34. Many FAQs, including this Listing, are available on the archive site
  35. rtfm.mit.edu in the directory pub/usenet/news.answers.  The name under
  36. which a FAQ is archived appears in the Archive-name line at the top of
  37. the article.
  38.  
  39. There's a mail server on that machine. You send a e-mail message to
  40. mail-server@rtfm.mit.edu containing the keyword "help" (without quotes!)
  41. in the message body. To fetch this particular FAQ send a message with the 
  42. following body:
  43.  
  44.     send usenet/news.answers/medical-image-faq/part1
  45.     ...
  46.     send usenet/news.answers/medical-image-faq/part8
  47.  
  48. Please direct comments or questions and especially contributions to
  49.  
  50.     "dclunie@flash.us.com"
  51.  
  52. or reply to this article. All unknown formats and test images gratefully
  53. accepted, but please don't email them, rather contact me and we can
  54. arrange to exchange documents or disks or tapes by snail mail.
  55.  
  56.  
  57. Changes this issue
  58.  
  59.     Split into 8 smaller parts for News software that baulks on big posts.
  60.     Fixed numerous typos and difficulties with converting html to posting.
  61.     Visible Human project information.
  62.     RSNA WWW server.
  63.     New Evergreen Technologies email address.
  64.     More Mac and Windows viewer sources.
  65.     Dermatology server.
  66.     Physics server.
  67.     Fully functional 3DVIEWNIX1.1 now available for ftp.
  68.     Teleradiology vendors.
  69.     An NIH image macro to import ACR/NEMA files.
  70.     A few more Genesis hints/updates.
  71.     Update SCAR email address.
  72.     Ftp site for Linux DICOM CTN software.
  73.     Updated HSPNET-L entry.
  74.     Updated ADAM entry.
  75.     Angiography simulation site.
  76.     GE Ultrasound contact.
  77.     sci.med.radiology gateway.
  78.     Neuroscience Resources List www site.
  79.     Radiology history www site.
  80.     Updated DeJarnette details.
  81.     Updated Papyrus entry.
  82.     PET www site.
  83.     EurIPACS www site.
  84.     ImportAccess Photoshop plugin.
  85.     Described SPI in much more detail.
  86.     Siemens SPI devices including Somatom Plus, Impact, SP.
  87.     Sytec format added.
  88.     Siemens DR CT format updated.
  89.     ISG/Philips Gyroview comments added.
  90.  
  91. Changes last issue
  92.  
  93.     Update to World Wide Web HTML format.
  94.     Sytec format is different from PACE.
  95.     Genesis architecture is Sun3 68000 not Sun4 SPARC.
  96.     Add Genesis DAT format.
  97.     Add newsgroups entry to sources.
  98.     Rearranged the resources stuff a little.
  99.     Incorporated some DICOM resources from Dwight Simon's directory.
  100.     Added DICOM references made available at RSNA 1994.
  101.     GE ftp site for conformance statements and sample DICOM images.
  102.     Remove some of the gratuitous anti-VMS nasty comments.
  103.     Change DICOM File Meta Information Header Transfer Syntax to Explicit VR.
  104.  
  105.  
  106. Subject: Contents
  107.  
  108. 1.  Introduction
  109.  
  110.     1.1 Objective
  111.     1.2 Types of Formats
  112.     1.3 In Desperation - Quick & Dirty Tricks
  113.  
  114. 2.  Standard Formats
  115.  
  116.     2.1 ACR/NEMA 1.0 and 2.0
  117.     2.2 ACR/NEMA DICOM 3.0
  118.     2.3 Papyrus
  119.     2.4 Interfile V3.3
  120.     2.5 Qsh
  121.  
  122. 3.  Proprietary Formats
  123.  
  124.     3.1 General
  125.  
  126.         3.1.1 SPI (Standard Product Interconnect)
  127.  
  128.     3.2 CT
  129.  
  130.         3.2.1 General Electric
  131.  
  132.               3.2.1.1 CT 9800
  133.  
  134.                       3.2.1.1.1 Image data
  135.                       3.2.1.1.2 Tape format
  136.                       3.2.1.1.3 Raw data
  137.  
  138.               3.2.1.2 CT Advantage - Genesis
  139.  
  140.                       3.2.1.2.1 Image data
  141.                       3.2.1.2.2 Archive format
  142.                       3.2.1.2.3 Raw data
  143.  
  144.               3.2.1.3 Pace
  145.               3.2.1.4 Sytec
  146.  
  147.         3.2.2 Siemens
  148.  
  149.               3.2.2.1 Somatom DR
  150.               3.2.2.2 Somatom Plus
  151.               3.2.2.3 Somatom AR
  152.  
  153.         3.2.3 Philips
  154.         3.2.4 Picker
  155.         3.2.5 Toshiba
  156.         3.2.6 Hitachi
  157.         3.2.7 Shimadzu
  158.         3.2.8 Elscint
  159.  
  160.     3.3 MR
  161.  
  162.         3.3.1 General Electric
  163.  
  164.               3.3.1.1 Signa 3X and 4X
  165.  
  166.                       3.3.1.1.1 Image data
  167.                       3.3.1.1.2 Tape format
  168.                       3.3.1.1.3 Raw data
  169.  
  170.               3.3.1.2 Signa 5X - Genesis
  171.  
  172.                       3.3.1.2.1 Image data
  173.                       3.3.1.2.2 Archive format
  174.                       3.3.1.2.3 Raw data
  175.  
  176.               3.3.1.3 Vectra
  177.  
  178.         3.3.2 Siemens
  179.  
  180.               3.3.2.1 GBS II
  181.               3.3.2.2 SP
  182.               3.3.2.3 Impact
  183.               3.3.2.4 Vision
  184.  
  185.         3.3.3 Philips
  186.  
  187.               3.3.3.1 S5
  188.               3.3.3.2 ACS
  189.               3.3.3.3 T5
  190.               3.3.3.4 NT5 & NT15
  191.  
  192.         3.3.4 Picker
  193.         3.3.5 Toshiba
  194.         3.3.6 Hitachi
  195.         3.3.7 Shimadzu
  196.         3.3.8 Elscint
  197.  
  198.     3.4 Proprietary Workstations
  199.  
  200.         3.4.1 ISG Workstations
  201.  
  202.               3.3.3.1 Gyroview
  203.  
  204.     3.5 Other
  205.  
  206. 4.  Host Machines
  207.  
  208.     4.1 Data General
  209.  
  210.         4.1.1 Data
  211.  
  212.               4.1.1.1 Integers
  213.               4.1.1.2 Floating Point
  214.  
  215.         4.1.2 Operating System
  216.  
  217.               4.1.2.1 RDOS
  218.               4.1.2.2 AOS/VS
  219.  
  220.         4.1.3 Network
  221.  
  222.     4.2 Vax
  223.  
  224.         4.2.1 Data
  225.  
  226.               4.2.1.1 Integers
  227.               4.2.1.2 Floating Point
  228.               4.2.1.3 Strings
  229.  
  230.         4.2.2 Operating System
  231.  
  232.               4.2.2.1 VMS
  233.               4.2.2.2 ULTRIX
  234.               4.2.2.3 OSF
  235.  
  236.     4.3 Sun - Sun3 68000 and Sun4 Sparc
  237.  
  238.         4.3.1 Data
  239.  
  240.               4.3.1.1 Integers
  241.               4.3.1.2 Floating Point
  242.               4.3.1.3 Strings
  243.  
  244.         4.3.2 Operating System
  245.  
  246. 5.  Compression Schemes
  247.  
  248.     5.1 Reversible
  249.     5.2 Irreversible
  250.  
  251.         5.2.1 Perimeter Encoding
  252.  
  253. 6.  Getting Connected
  254.  
  255.     6.1 Tapes
  256.     6.2 Ethernet
  257.     6.3 Serial Ports
  258.  
  259. 7.  Sources of Information
  260.  
  261.     7.1 Vendor Contacts
  262.     7.2 Relevant FAQ's
  263.     7.3 Source Code
  264.     7.4 Commercial Offerings
  265.     7.5 FTP/WWW sites
  266.     7.6 Mailservers
  267.     7.7 References
  268.     7.8 Organizations and Societies
  269.     7.9 Usenet Newsgroups
  270.  
  271. 8.  Acknowledgements
  272.  
  273.  
  274. 1.  Introduction
  275.  
  276.     1.1 Objective
  277.  
  278.         The goal of this FAQ is to facilitate access to medical images stored
  279. on digital imaging modalities such as CT and MR scanners, and their
  280. accompanying descriptive information. The document is designed particularly for
  281. those who do not have access to the necessary proprietary tools or
  282. descriptions, particularly in those moments when inspiration strikes and one
  283. just can't wait for the local sales person to track down the necessary
  284. authority and go through the cycle of correspondence necessary to get a
  285. non-disclosure agreement in place, by which time interest in the project has
  286. usually faded, and another great research opportunity has passed! It may also
  287. be helpful for those keen to experiment with home-grown PACS-like systems using
  288. their existing equipment, and also for those who still have equipment that is
  289. still useful but so old even the host computer vendor doesn't support it any
  290. more!
  291.  
  292.         There is of course no substitute for the genuine tools or descriptions
  293. from the equipment vendors themselves, and pointers to helpful individuals in
  294. various organizations, as well as names and catalog numbers of various useful
  295. documents, are included here where known.
  296.  
  297.         In addition there are several small companies that specialize in such
  298. connectivity problems that have a good reputation and are well known. Contact
  299. information is provided for them, though I personally have no experience with
  300. their products and am not endorsing them.
  301.  
  302.         Finally, great care has been taken not to include any information that
  303. has been released under non-disclosure agreements. What is included here is the
  304. result of either information freely released by vendors, handy hints from
  305. others working in the field, or in many cases close scrutiny of hex dumps and
  306. experimentation with scanner parameters and study of the effects on the image
  307. files. The intent is to spread hard-earned knowledge gained over many years
  308. amongst those new to the field or a particular piece of equipment, not to
  309. threaten anyone's proprietary interests, or to substitute for the technical
  310. support available from vendors that ranges from free to extortionate, and
  311. excellent to abysmal, depending on who your are dealing with and where in the
  312. world you are located!
  313.  
  314.          Please use this information in the spirit in which is intended, and
  315. where possible contribute whatever you know in order to expand the information
  316. to cover more vendors and equipment.
  317.  
  318.     1.2 Types of Formats
  319.  
  320.         Later sections will deal with the problems of getting the image files
  321. from the modality to the workstation, but for the moment assume the files are
  322. there and need to be deciphered.
  323.  
  324.         Four types of information are generally present in these files:
  325.  
  326.            - image data, which may be unmodified or compressed,
  327.            - patient identification and demographics,
  328.            - technique information about the exam, series, and slice/image.
  329.  
  330.         Extracting the image information alone is usually straightforward and
  331. is described in 1.3. Dealing with the descriptive information, for example to
  332. make use of the data for dissemination in a PACS environment, or to extract
  333. geometry details in order to combine images into 3D datasets, is more difficult
  334. and requires deeper understanding of how the files are constructed.
  335.  
  336.         There are three basis families of formats that are in popular use:
  337.  
  338.            - fixed format, where layout is identical in each file,
  339.            - block format, where the header contains pointers to information,
  340.            - tag based format, where each item contains its own length.
  341.  
  342.         The block format is one of the most popular, though in most cases, the
  343. early part of the header contains only a limited number of pointers to large
  344. blocks, the blocks are almost always in the same place and a constant length,
  345. for standard rather than reformatted images at least, and if one doesn't know
  346. the specifics of the layout one can get by assumming a fixed format. I presume
  347. this reflects the intent of the designers to handle future expansion and
  348. revision of the format.
  349.  
  350.          The example par excellence of the tag based format is the ACR/NEMA
  351. style of data stream, which, though never intended as a file format per se has
  352. proven useful as model. See for example the sections dealing with the ACR/NEMA
  353. standards as well as DICOM (whose creators are about to vote on a media
  354. interchange format after all this time) and Papyrus. ACR/NEMA style tags are
  355. described in more detail elsewhere, but each is self-contained and
  356. self-describing (at least if you have the appropriate data dictionary) and
  357. contains its own length, so if you can't interpret it you can skip it! Very
  358. convenient. Most file formats based on this scheme are just concatenated series
  359. of tags, and apart from having to guess the byte order, which is not specified
  360. (unlike TIFF which is a similar deal for those in the "real" imaging world),
  361. and sometimes skip a fixed length but short header, are dead easy to handle.
  362.  
  363.          To identify such a file just do a "strings <file | grep 'ACR-NEMA'" -
  364. if it is such a file, just look through the start of the hex dump until you
  365. start to see the characteristic sequentially ordered pairs of 16 bit words that
  366. identify ACR/NEMA attributes, decide the byte order, et voila, you can pipe it
  367. into any general ACR/NEMA dumping program to see what it contains. If you see
  368. even group tags, they will be described in the standard. If you see odd group
  369. tags then they are vendor specific and you will have to ask the vendor or
  370. correlate them with identification information printed on the film until you
  371. figure out the ones that are important to you.
  372.  
  373.     1.3 In Desperation - Quick & Dirty Tricks
  374.  
  375.         Because radiologists, radiographers, technologists, physicists and
  376. imaging programmers are dedicated long suffering creatures who work long hours
  377. under adverse conditions for little reward, the vendors in their generosity
  378. have seen fit to make life a little easier, by almost universally putting the
  379. image data at the end of the file. Rarely you will see files that are padded
  380. out to fixed record size boundaries (eg. Vax VMS 512 byte records), and
  381. sometimes overlay plane data may be stored after the image data. Furthermore
  382. there is almost always an option at archive time to allow for storage in an
  383. uncompressed and totally unadulterated form. Even in ACR/NEMA the tag for image
  384. pixel data is numerically the highest and hence the last to appear in the
  385. sequence which is guaranteed to be sorted. They could have screwed us up
  386. totally by gratuitously adding variable length blocks of other stuff at the
  387. end, but the only time I have encountered this was on a Siemens Impact with the
  388. ACR/NEMA based SPI format padded out to 512 bytes.
  389.  
  390.         In other words, if an image is 256 by 256, uncompressed, and 12-16 bits
  391. deep (and hence usually, though not always, stored as two bytes per pixel),
  392. then we all know that the file is going to contain 256*256*2=131072 bytes of
  393. pixel data at the end of the file. If the file is say 145408 bytes long, as all
  394. GE Signa 3X/4X files are for example, then you need to skip 14336 bytes of
  395. header before you get to the data. Presume row by row starting with top left
  396. hand corner raster order, try both alternatives for byte order, deal with the
  397. 16 to 8 bit windowing problem, and very soon you have your image on the screen
  398. of your workstation.
  399.  
  400.          This technique is so useful, even NIH Image for the Macintosh (an
  401. excellent must-have free program BTW.) provides a raw import tool to do this,
  402. and describes it in the manual using the 14336 byte offset! This tool is
  403. something that is sadly lacking in most commercial image handling programs for
  404. non-medical applications, which can't import images with more than 8 bits per
  405. channel.
  406.  
  407.          Of course you have to live without the identification, demographic and
  408. technique information (other than what can be derived from the file name in
  409. some cases), but for many research and presentation purposes this is quite
  410. adequate.
  411.  
  412.          Occasionally one runs into clever files where four 12 bit words are
  413. packed into three 16 bit words and one goes crazy trying to figure out the
  414. logic of how they are packed. The back of the old ACR/NEMA standard describes
  415. somewhere one way in which this is done. One should still be able to calculate
  416. the length easily enough.
  417.  
  418.          I haven't yet encountered a format that did nasty things like have
  419. strips of rows seperated by padding ... I guess we are lucky that most images
  420. are nice powers of two or even multiples thereof (256,320,512).
  421.  
  422.          Of course the GE CT 9800 uses perimeter encoding even when DPCM
  423. compression is not selected, so this technique won't work.
  424.  
  425. 2.  Standard Formats
  426.  
  427.     2.1 ACR/NEMA 1.0 and 2.0
  428.  
  429.         ACR/NEMA Standards Publication No. 300-1985      <- ACR/NEMA 1.0
  430.         ACR/NEMA Standards Publication No. 300-1988      <- ACR/NEMA 2.0
  431.         ACR/NEMA Standards Publication PS2-1989          <- data compression
  432.  
  433.         The American College of Radiologists (ACR) and the National Electrical
  434. Manufacturers Association (NEMA) recognized some time ago the need for
  435. standards to facilitate multi-vendor connectivity to promote the development of
  436. PACS and what is now referred to as Wide Area Networking. The first such
  437. standard was version 1.0 which was released in 1985 as ACR/NEMA Standards
  438. Publication No. 300-1985, subsequently revised several times, then revised
  439. again and released as version 2.0 in 1988, described in ACR/NEMA Standards
  440. Publication No. 300-1988. There it remained until a radically revised and
  441. reorganized approach, preserving backward compatibility, was released during
  442. 1992-1993 as ACR/NEMA Standards Publication PS3, also referred to as DICOM 3.
  443.  
  444.         In the interim, to facilitate the transfer of compressed images,
  445. another standard described in ACR/NEMA Standards Publication PS2-1989, was
  446. released which described various means fo extending standard 300-1985 to handle
  447. compression utilizing a broad range of reversible and irreversible schemes.
  448. Though this part of the standard was never apparently implemented by anyone,
  449. and has been quietly bypassed by those working on DICOM 3 compression, it makes
  450. very interesting reading and is a nice summary of applicable techniques.
  451.  
  452.         What does one need to know about ACR/NEMA 1.0 and 2.0 ? The standards
  453. define a mechanism along the lines of the layered ISO-OSI (Open Systems
  454. Interconnect) model, with physical, transport/network, session, and
  455. presentation and application layers. Unless one actually wants to physically
  456. connect to a device that supports the unique 50 pin point-to-point electrical
  457. interface, then one really only needs to be aware of how ACR/NEMA implements
  458. the presentation and application layers, which are described in terms of a
  459. "message format". This message format is important to many people, not because
  460. anyone seriously wants to connect devices in the limited fashion envisaged by
  461. these early standards, but because many proprietary formats and other de facto
  462. standards have adopted the ACR/NEMA message format and its corresponding data
  463. dictionary and extension mechanisms.
  464.  
  465.          The message format is described in sections 4, 5 and 10 of ACR/NEMA SP
  466. 300-1988 which are summarized briefly here. Section 6 describes command
  467. structure which is not really relevant other than that commands are also
  468. structured in the same way as data and consume part of the data dictionary. You
  469. will not encounter command tags in data streams ("messages") encapsulated in
  470. file formats though.
  471.  
  472.          A message consists of a series of "data elements" each of which
  473. contains a piece of information. Each element is described by an "element name"
  474. consisting of a pair of 16 bit unsigned integers ("group number", "data element
  475. number"). The data stream is ordered by ascending group number, and within each
  476. group by ascending data element number. Each element may occur only once in a
  477. message. Even numbered groups describe elements defined by the standard. Odd
  478. numbered groups are available for use by vendors or users, but must conform to
  479. the same structure as standard elements. Following the (group number, data
  480. element number) pair is a length field that is a 32 bit unsigned even integer
  481. that describes the number of bytes from the end of the length field to the
  482. beginning of the next data element. The last part of a data element is its
  483. value, which is defined by the data dictionary to be an ascii (numeric AN or
  484. text AT) or binary value (BI 16 bit or BD 32 bit), which may be single values
  485. or multiple in which case ascii values are delimited by the '\' backslash
  486. character. Odd length ascii values are padded with a space (020H).
  487.  
  488.         For example:
  489.  
  490.             0008 0010  000C 0000  4341 2D52 454E 414D
  491.                                   3120 302E
  492.  
  493.         is data element "Recognition Code" because that is what the dictionary
  494. defines group 0008 element 0010 to be. The dictionary says it is of type AT
  495. (ascii text), has a value multiplicity of single and only enumerated values are
  496. allowed, in this case the ascii string "ACR-NEMA 2.0". It is of length 0000000C
  497. hex or 12 bytes long.
  498.  
  499.         Note that the electrical interface is a 16 bit one, and hence even
  500. though 32 binary values are defined to be transmitted least significant word
  501. first (though the order for the 32 bit length is not actually specified), there
  502. is no mention in the standard as to how to encapsulate the message in an 8 bit
  503. world, hence different users and vendors have chosen little or big endian
  504. schemes. The new DICOM standard assumes a default little endian representation
  505. which seems to be the most appropriate considering the old definition for 32
  506. bit words.
  507.  
  508.         Notice particularly how this design allows one to parse the message
  509. even if the data dictionary is not complete. Consider an element that has an
  510. unrecognized element name. One cannot interpret the content of the element and
  511. so has to ignore it. One doesn't even know whether it contains binary or ascii
  512. information (this is what DICOM later refers to as "implicit representation".
  513. despite this, the length value allows one to skip to the next element and
  514. proceed.
  515.  
  516.         Over the years there has been much discussion amongst those who favour
  517. such implicit dictionary driven schemes, and those who prefer explicit
  518. representations, including explicit description of the element type (binary or
  519. ascii, etc.) and even the element description itself! Some would prefer the
  520. message to contain something like "RecognitionCode='ACR-NEMA 2.0';" for
  521. example. The nuclear medicine groups have adopted a de facto standard called
  522. Interfile that makes use of ACR/NEMA data elements, but uses such a descriptive
  523. representation. Their argument is that the data stream is much more readable
  524. which is true enough, and more readily extensible.
  525.  
  526.         The groups are organized as follows:
  527.  
  528.             0000                    Command
  529.             0008                    Identifying
  530.             0010                    Patient
  531.             0018                    Acquisition
  532.             0020                    Relationship
  533.             0028                    Image Presentation
  534.             4000                    Text
  535.             6000-601E (even)        Overlay
  536.             7FE0                    Pixel Data
  537.  
  538.         Some of the more interesting elements are:
  539.  
  540.             (nnnn,0000) BD S Group Length           # of bytes in group nnnn
  541.             (nnnn,4000) AT M Comments
  542.  
  543.             (0008,0010) AT S Recognition Code       # ACR-NEMA 1.0 or 2.0
  544.             (0008,0020) AT S Study Date             # yyyy.mm.dd
  545.             (0008,0020) AT S Series Date            # yyyy.mm.dd
  546.             (0008,0020) AT S Acquisition Date       # yyyy.mm.dd
  547.             (0008,0020) AT S Image Date             # yyyy.mm.dd
  548.             (0008,0030) AT S Study Time             # hh.mm.ss.frac
  549.             (0008,0031) AT S Series Time            # hh.mm.ss.frac
  550.             (0008,0032) AT S Acquisition Time       # hh.mm.ss.frac
  551.             (0008,0033) AT S Image Time             # hh.mm.ss.frac
  552.             (0008,0060) AT S Modality               # CT,NM,MR,DS,DR,US,OT
  553.  
  554.             (0010,0010) AT S Patient Name
  555.             (0010,0020) AT S Patient ID
  556.             (0010,0030) AT S Patient Birthdate      # yyyy.mm.dd
  557.             (0010,0040) AT S Patient Sex            # M, F, O for other
  558.             (0010,1010) AT S Patient Age            # xxxD or W or M or Y
  559.  
  560.             (0018,0010) AT M Contrast/Bolus Agent   # or NONE
  561.             (0018,0030) AT M Radionuclide
  562.             (0018,0050) AN S Slice Thickness        # mm
  563.             (0018,0050) AN M KVP
  564.             (0018,0080) AN S Repetition Time        # ms
  565.             (0018,0081) AN S Echo Time              # ms
  566.             (0018,0082) AN S Inversion Time         # ms
  567.             (0018,1120) AN S Gantry Tilt            # degrees
  568.  
  569.             (0020,1040) AT S Position Reference     # eg. iliac crest
  570.             (0020,1040) AN S Slice Location         # in mm (signed)
  571.  
  572.             (0028,0010) BI S Rows
  573.             (0028,0011) BI S Columns
  574.             (0028,0030) AN M Pixel Size             # row\col in mm
  575.             (0028,0100) BI S Bits Allocated         # eg. 12 bit for CT
  576.             (0028,0101) BI S Bits Stored            # eg. 16 bit
  577.             (0028,0102) BI S High Bit               # eg. 11
  578.             (0028,0102) BI S Pixel Representation   # 1 signed, 0 unsigned
  579.  
  580.             (7FE0,0010) BI M Pixel Data             # as described by grp 0028
  581.  
  582.         The way in which the pixel data is stored can vary tremendously, though
  583. thankfully most users and vendors use the simple unimaginative scheme that is
  584. shown above, ie. 1 12 bit pixel stored in the low order part of a 16 bit word
  585. with no attempt at packing more compactly. Following are some examples shown in
  586. Appendix E of the standard. Note that when one adds the little/big endian
  587. question the permutations mount!
  588.  
  589.         Bits Allocated = 16
  590.         Bits Stored    = 12
  591.         High Bit       = 11
  592.  
  593.                           |<------------------ pixel ----------------->|
  594.             ______________ ______________ ______________ ______________
  595.            |XXXXXXXXXXXXXX|              |              |              |
  596.            |______________|______________|______________|______________|
  597.             15          12 11           8 7            4 3            0
  598.  
  599.         ---------------------------
  600.  
  601.         Bits Allocated = 16
  602.         Bits Stored    = 12
  603.         High Bit       = 15
  604.  
  605.            |<------------------ pixel ----------------->|
  606.             ______________ ______________ ______________ ______________
  607.            |              |              |              |XXXXXXXXXXXXXX|
  608.            |______________|______________|______________|______________|
  609.             15          12 11           8 7            4 3            0
  610.  
  611.         ---------------------------
  612.  
  613.         Bits Allocated = 12
  614.         Bits Stored    = 12
  615.         High Bit       = 11
  616.  
  617.            ------ 2 ----->|<------------------ pixel 1 --------------->|
  618.             ______________ ______________ ______________ ______________
  619.            |              |              |              |              |
  620.            |______________|______________|______________|______________|
  621.             15          12 11           8 7            4 3            0
  622.  
  623.            -------------- 3 ------------>|<------------ 2 --------------
  624.             ______________ ______________ ______________ ______________
  625.            |              |              |              |              |
  626.            |______________|______________|______________|______________|
  627.             15          12 11           8 7            4 3            0
  628.  
  629.            |<------------------ pixel 4 --------------->|<----- 3 ------
  630.             ______________ ______________ ______________ ______________
  631.            |              |              |              |              |
  632.            |______________|______________|______________|______________|
  633.             15          12 11           8 7            4 3            0
  634.  
  635.         ---------------------------
  636.  
  637.         And so on ... refer to the standard itself for more detail.
  638.  
  639. -- 
  640. David A. Clunie (dclunie@flash.us.com)
  641. In sunny Riyadh, Saudi Arabia.
  642. Archive-name: medical-image-faq/part2
  643. Posting-Frequency: monthly
  644. Last-modified: Sat Feb 18 16:42:58 GMT+0300 1995
  645. Version: 2.01
  646.  
  647.  
  648.     2.2 ACR/NEMA DICOM 3.0
  649.  
  650.         ACR/NEMA Standards Publications
  651.  
  652.             No. PS 3.1-1992   <- DICOM 3 - Introduction & Overview
  653.             No. PS 3.8-1992   <- DICOM 3 - Network Communication Support
  654.  
  655.             No. PS 3.2-1993   <- DICOM 3 - Conformance
  656.             No. PS 3.3-1993   <- DICOM 3 - Information Object Definitions
  657.             No. PS 3.4-1993   <- DICOM 3 - Service Class Specifications
  658.             No. PS 3.5-1993   <- DICOM 3 - Data Structures & Encoding
  659.             No. PS 3.6-1993   <- DICOM 3 - Data Dictionary
  660.             No. PS 3.7-1993   <- DICOM 3 - Message Exchange
  661.             No. PS 3.9-1993   <- DICOM 3 - Point-to-Point Communication
  662.  
  663.             No. PS 3.10-????  <- DICOM 3 - Media Storage & File Format
  664.             No. PS 3.11-????  <- DICOM 3 - Media Storage Application Profiles
  665.             No. PS 3.12-????  <- DICOM 3 - Media Formats & Physical Media
  666.  
  667.         DICOM (Digital Imaging and Communications in Medicine) standards are of
  668. course the hot topic at every radiological trade show. Unlike previous attempts
  669. at developing a standard, this one seems to have the potential to actually
  670. achieve its objective, which in a nutshell, is to allow vendors to produce a
  671. piece of equipment or software that has a high probability of communicating
  672. with devices from other vendors.
  673.  
  674.         Where DICOM differs substantially from other attempts, is in defining
  675. so called Service-Object Pairs. For instance if a vendor's MR DICOM conformance
  676. statement says that it supports an MR Storage Class as a Service Class
  677. Provider, and another vendor's workstation says that it supports an MR Storage
  678. Class as a Service Class User, and both can connect via TCP/IP over Ethernet,
  679. then the two devices will almost certainly be able to talk to each other once
  680. they are setup with each others network addresses and so on.
  681.  
  682.         The keys to the success of DICOM are the use of standard network
  683. facilities for interconnection (TCP/IP and ISO-OSI), a mechanism of association
  684. establishment that allows for negotiation of how messages are to be
  685. transferred, and an object-oriented specification of Information Objects (ie.
  686. data sets) and Service Classes.
  687.  
  688.         Of course all this makes for a huge and difficult to read standard, but
  689. once the basic concepts are grasped, the standard itself just provides a
  690. detailed reference. From the users' and equipment purchasers' points of view
  691. the important thing is to be able to read and match up the Conformance
  692. Statements from each vendor to see if two pieces of equipment will talk.
  693.  
  694.         Just being able to communicate and transfer information is of course
  695. not sufficient - these are only tools to help construct a total system with
  696. useful functionality. Because a workstation can pull an image off an MRI
  697. scanner doesn't mean it knows when to do it, when the image has become
  698. available, to which patient it belongs, and where it is subsequently archived,
  699. not to mention notifying the Radiology or Hospital Information System (RIS/HIS)
  700. when such a task has been performed. In other words DICOM Conformance does not
  701. guarantee functionality, it only facilitates connectivity.
  702.  
  703.         In otherwords, don't get too carried away with espousing the virtues of
  704. DICOM, demanding it from vendors, and expecting it to be the panacea to create
  705. a useful multi-vendor environment.
  706.  
  707.         Fred Prior (prior@xray.hmc.psu.edu) has come up with the concept of a
  708. User Conformance Statement to be generated by purchasers and to be satisfied by
  709. vendors. The idea is that one describes what one expects and hence gives the
  710. vendor a chance to realistically satisfy the buyer! Of course each such
  711. statement must be tailored to the user's needs, and simply stapling a copy of
  712. Fred's statement to a Request For Proposals is not going to achieve the desired
  713. objective. Caveat empor.
  714.  
  715.         To get more information about DICOM:
  716.  
  717.            - Purchase the standards from NEMA.
  718.  
  719.            - Ftp the final versions of the drafts in electronic form
  720.               one of the sites described below.
  721.  
  722.            - Follow the Usenet group comp.protocols.dicom.
  723.  
  724.            - Get a copy of "Understanding DICOM 3.0" $12.50 from Kodak.
  725.  
  726.            - Insist that your existing and potential vendors supply you
  727.               with DICOM conformance statements before you upgrade or
  728.               purchase, and don't buy until you know what they mean. Don't
  729.               take no for an answer!!!!
  730.  
  731.         What is all this doing in an FAQ about medical image formats you ask ?
  732. Well first of all, in many ways DICOM 3.0 will solve future connectivity
  733. problems, if not provide functional solutions to common problems. Hence
  734. actually getting the images from point A to B is going to be easier if everyone
  735. conforms. Furthermore, for those of us with old equipment, interfacing it to
  736. new DICOM conforming equipment is going to be a problem. In otherwords old
  737. network solutions and file formats are going to have to be transformed if they
  738. are going to communicate unidirectionally or bidirectionally with DICOM 3.0
  739. nodes. One is still faced with the same old questions of how does one move the
  740. data and how does one interpret it.
  741.  
  742.          The specifics of the DICOM message format are very similar to the
  743. previous versions of ACR/NEMA on which it is based. The data dictionary is
  744. greatly extended, and certain data elements have been "retired" but can be
  745. ignored gracefully if present. The message itself can now be transmitted as a
  746. byte stream over networks, rather than using a point-to-point paradigm
  747. excusively (though the old point-to-point interface is available). This message
  748. can be encoded in various different Transfer Syntaxes for transmission. When
  749. two devices ("Application Entities" or AE) begin to establish an "Association",
  750. they negotiate an appropriate transfer syntax. They may choose an Explicit
  751. Big-Endian Transfer Syntax in which integers are encoded as big-endian and
  752. where each data element includes a specific field that says "I am an unsigned
  753. 16 bit integer" or "I am an ascii floating-point number", or alternatively they
  754. can fall back on the default transfer syntax which every AE must support, the
  755. Implicit Little-Endian Transfer Syntax which is just the same as an old
  756. ACR/NEMA message with the byte order defined once and for all.
  757.  
  758.         This is all very well if you are using DICOM as it was originally
  759. envisaged - talking over a network, negotiating an association, and determining
  760. what Transfer Syntax to use. What if one wants to store a DICOM message in a
  761. file though ? Who is to say which transfer syntax one will use to encode it
  762. offline ? One approach, used for example by the Central Test Node software
  763. produced by Mallinkrodt and used in the RSNA Inforad demonstrations, is just to
  764. store it in the default little-endian implicit syntax and be done with it. This
  765. is obviously not good enough if one is going to be mailing tapes, floppies and
  766. optical disks between sites and vendors though, and hence the DICOM group
  767. decided to define a "Media Storage & File Format" part of the standard, the new
  768. Chapter 10 which is about to be or has just been voted on.
  769.  
  770.         Amongst other things, this new part defines a generic DICOM file format
  771. that contains a brief header, the "DICOM File Meta Information Header" which
  772. contains a 128 byte preamble (that the user can fill with anything), a 4 byte
  773. DICOM prefix "DICM", then a short DICOM format message that contains newly
  774. defined elements of group 0002 in a specified Transfer Syntax, which uniquely
  775. identify the data set as well as specifying the Transfer Syntax for the rest of
  776. the file. The rest of the message must specify a single SOP instance which can
  777. of course contain multiple images as folders if necessary. The length of the
  778. brief message in the Meta Header is specified in the first data element as
  779. usual, the group length.
  780.  
  781. Originally the draft of Part 10 specified the default Implicit Value
  782. Representation Little Endian Transfer Syntax as the DICOM File Meta Information
  783. Header Transfer Syntax, which is in keeping with the concept that it is the
  784. default for all other parts of the standard. I am told however, though I
  785. haven't seen it, that the final standard will have changed this to Explicit
  786. Value Representation Little Endian Transfer Syntax. This seems like an
  787. extremely irritating change to me but I guess purists have prevailed.
  788.  
  789.         So what choices of Transfer Syntax does one have and why all the fuss ?
  790. Well the biggest distinction is between implicit and explicit value
  791. representation which allows for multiple possible representations for a single
  792. element, in theory at least, and perhaps allows one to make more of an unknown
  793. data element than one otherwise could perhaps. Some purists (and Interfile
  794. people) would argue that the element should be identified descriptively, and
  795. there is nothing to stop someone from defining their own private Transfer
  796. Syntax that does just that (what a heretical thought, wash my mouth out with
  797. soap). With regard to the little vs. big endian debate I can't see what the
  798. fuss is about, as it can't really be a serious performance issue.
  799.  
  800.         Perhaps more importantly in the long run, the Transfer Syntax mechanism
  801. provides a means for encapsulating compressed data streams, without having to
  802. deal with the vagaries and mechanics of compression in the standard itself. For
  803. example, if DICOM version 3.0, in addition to the "normal" Transfer Syntaxes, a
  804. series are defined to correspond to each of the Joint Photographic Experts
  805. Group (JPEG) processes. Each one of these Transfer Syntaxes encodes data
  806. elements in the normal way, except for the image pixel data, which is defined
  807. to be encoded as a valid and self-contained JPEG byte stream. Both reversible
  808. and irreversible processes of various types are provided for, without having to
  809. mess with the intricacies of encoding the various tables and parameters that
  810. JPEG processes require. Presumably a display application that supports such a
  811. Transfer Syntax will just chop out the byte stream, pass it to the relevant
  812. JPEG decode, and get an uncompressed image back. More importantly, an archive
  813. server can store the image and retrieve it without ever having to know anything
  814. about how the image pixel data is encoded. Contrast this approach with that
  815. taken by those defining the TIFF (Tagged Image File Format) for general imaging
  816. and page layout applications. In their version 6.0 standard they attempted to
  817. disassemble the JPEG stream into its various components and assign each to a
  818. specific tag. Unfortunately this proved to be unworkable after the standard was
  819. disseminated and they have gone back to the drawing board.
  820.  
  821.         Now one may not like the JPEG standard, but one cannot argue with the
  822. fact that the scheme is workable, and a readily available means of reversible
  823. compression has been incorporated painlessly. How effective a compression
  824. scheme this is remains to be determined, and whether or not the irreversible
  825. modes gain wide acceptance will be dictated by the usual medico-legal paranoia
  826. that prevails in the United States, but the option is there for those who want
  827. to take it up. There is of course no reason why private compression schemes
  828. cannot be readily incorporated using this "encapsulation" mechanism, and to
  829. preserve bandwidth this will undoubtedly occur. This will not compromise
  830. compatibility though, as one can always fall back to a default, uncompressed
  831. Transfer Syntax. The DICOM Working Group IV on compression will undoubtedly
  832. bring out new possibilities. Currently there is a lot of interest in RLE (Run
  833. Length Encoded) compression, particularly from the Ultrasound group.
  834.  
  835.         In order to identify all these various syntaxes, information objects,
  836. and so on, DICOM has adopted the ISO concept of the Unique Identifier (UID)
  837. which is a text string of numbers and periods with a unique root for each
  838. organization that is registered with ISO and various organizations that in turn
  839. register others in a hierarchical fashion. For example 1.2.840.10008.1.2 is
  840. defined as the Implicit VR Little Endian Transfer Syntax. The 1 identifies ISO,
  841. the 2 is the ISO member body branch, the 840 is the specific member body
  842. country code, in this case ANSI, and the 10008 is registered by ANSI to NEMA
  843. for DICOM.  UID's are also used to uniqely identify non-DICOM specific things,
  844. such as information objects. These are constructed from a prefix registered to
  845. the supplier or vendor or site, and a unique suffix that may be generated from
  846. say a date and time stamp (which is not to be parsed). For example an instance
  847. of a CT information object might have a UID of
  848. 1.2.840.123456.002.999999.940623.170717 where a (presumably US) vendor
  849. registered 123456, and the modality generated a unique suffix based on its
  850. device number, patient hospital id, date and time, which have no other
  851. significance other than to create a unique suffix.
  852.  
  853.         The other important new concept that DICOM introduced was the concept
  854. of Information Objects. In the previous ACR/NEMA standard, though modalities
  855. were identified by a specific data element, and though there were rules about
  856. which data elements were mandatory, conditional or optional in ceratin
  857. settings, the concept was relatively loosely defined. Presumably in order to
  858. provide a mechanism to allow conformance to be specified and hence ensure
  859. interoperability, various Information Objects are defined that are composed of
  860. sets of Modules, each module containing a specific set of data elements that
  861. are present or absent according to specific rules. For example, a CT Image
  862. Information Object contains amongst others, a Patient module, a General
  863. Equipment module, a CT Image module, and an Image Pixel module. An MR Image
  864. Information module would contain all of these except the CT Image module which
  865. would be replaced by an MR Image module. Clearly one needs descriptive
  866. information about a CT image that is different from an MR image, yet the
  867. commonality of the image pixel data and the patient information is recognized
  868. by this model.
  869.  
  870.         Hence, as described earlier, one can define pairs of Information
  871. Objects and Services that operate on such objects (Storage, Query/Retrieve,
  872. etc.) and one gets SOP classes and instances. All very object oriented and
  873. initially confusing perhaps, but it provides a mechanism for specifying
  874. conformance. From the point of view of an interpreters of a DICOM compatible
  875. data stream this means that for a certain instance of an Information Object,
  876. certain information is guaranteed to be in there, which is nice. As a creator
  877. of such a data stream, one must ensure that one follows all the rules to make
  878. sure that all the data elements from all the necessary modules are present.
  879. Having done so one then just throws all the data elements together, sorts them
  880. into ascending order by group and element order, and pumps them out. It is a
  881. shame that the data stream itself doesn't reflect the underlying order in the
  882. Information Objects, but I guess they had to maintain backward compatibility,
  883. hence this little bit of ugliness. This gets worse when one considers how to
  884. put more than one object in a folder inside another object.
  885.  
  886.         At this point I am tempted to include more details of various different
  887. modules, data elements and transfer syntaxes, as well as the TCP/IP mechanism
  888. for connection. However all this information is in the standard itself which is
  889. readily available electronically from the ftp sites, and in the interests of
  890. brevity I will not succumb to temptation at this time.
  891.  
  892.     2.3 Papyrus
  893.  
  894.         Papyrus is an image file format based on ACR/NEMA version 2.0. It was
  895. developed by the Digital Imaging Unit of the University Hospital of Geneva for
  896. the European project on telemedicine (TELEMED project of the RACE program),
  897. under the leadership of Dr. Osman Ratib (osman@cih.hcuge.ch). The University
  898. Hospital of Geneva uses Papyrus for their hospital-wide PACS.
  899.  
  900.         The medical file format component of Papyrus version 2 extended the
  901. ACR/NEMA format, particularly in order to reference multiple images by placing
  902. folder information referencing ACR-NEMA data sets in a shadow (private) group.
  903. Contributing to the development of DICOM 3, the team are updating their format
  904. to be compatible with the offline file format provisions of the draft Part 10
  905. of DICOM 3 in Papyrus version 3.
  906.  
  907.         The specifications, toolkit and image manipulation software that is
  908. Papyrus aware, Osiris, is available for the Mac, Windows, and Unix/X11/Motif by
  909. ftp from ftp://expasy.hcuge.ch/pub/Osiris.
  910.  
  911. See also Papyrus and Osiris ftp site.
  912.  
  913.         Further information is available in printed form. Contact
  914. yves@cih.hcuge.ch (Yves Ligier).
  915.  
  916.     2.4 Interfile V3.3
  917.  
  918.         Interfile is a "file format for the exchange of nuclear medicine image
  919. data" created I gather to satisfy the needs of the European COST B2 Project for
  920. the transfer of images of quality control phantoms, and incorporates the AAPM
  921. (American Association of Physicists in Medicine) Report No. 10, and has been
  922. subsequently used for clinical work.
  923.  
  924.         It specifies a file format composed of ascii "key-value" pairs and a
  925. data dictionary of keys. The binary image data may be contained in the same
  926. file as the "administrative information", or in a separate file pointed to by a
  927. "name of data file" key. Image data may be binary integers, IEEE floating point
  928. values, or ascii and the byte order is specified by a key "imagedata byte
  929. order". The order of keys is defined by the Interfile syntax which is more
  930. sophisticated than a simple list of keys, allowing for groups, conditionals and
  931. loops to dictate the order of key-value pairs.
  932.  
  933.         Conformance to the Interfile standard is informally described in terms
  934. of which types of image data types, pixel types, multiple windows, special
  935. Interfile features including curves, and restriction to various maximum
  936. recommended limits.
  937.  
  938.         Interfile is specifically NOT a communications protocol and strictly
  939. deals with offline files. There are efforts to extend Interfile to include
  940. modalities other than nuclear medicine, as well as to keep ACR/NEMA and
  941. Interfile data dictionaries in some kind of harmony.
  942.  
  943.         A sample list of Interfile 3.3 key-value pairs is shown here to give
  944. you some idea of the flavor of the format. The example is culled from part of a
  945. Static study in the Interfile standard document and is not complete:
  946.  
  947.                 !INTERFILE :=
  948.                 !imaging modality :=nucmed
  949.                 !version of keys :=3.3
  950.                 data description :=static
  951.                 patient name :=joe doe
  952.                 !patient ID  :=12345
  953.                 patient dob :=1968:08:21
  954.                 patient sex :=M
  955.                 !study ID :=test
  956.                 exam type :=test
  957.                 data compression :=none
  958.                 !image number :=1
  959.                 !matrix size [1] :=64
  960.                 !matrix size [2] :=64
  961.                 !number format :=signed integer
  962.                 !number of bytes per pixel :=2
  963.                 !image duration (sec) :=100
  964.                 image start time :=10:20: 0
  965.                 total counts :=8512
  966.                 !END OF INTERFILE :=
  967.  
  968.         One can see how easy such a format would be to extend, as well as how
  969. it is readable and almost useable without reference to any standard document or
  970. data dictionary.
  971.  
  972.         Undoubtedly ACR/NEMA DICOM 3.0 to Interfile translators will soon
  973. proliferate in view of the fact that many Nuclear Medicine vendors supply
  974. Interfile translators at present.
  975.  
  976.         To get hold of the Interfile 3.3 standard, see the sources, contacts
  977. and mailing list described later in this document.
  978.  
  979.     2.5 Qsh
  980.  
  981.         Qsh is a family of programs for manipulating images, and it defines an
  982. intermediate file format. The following information was derived with the help
  983. of one of the authors maguire@it.kth.se(Chip Maguire):
  984.  
  985.         Uses an ASCII key-value-pair (KVP sic.) system, based on the AAPM
  986. Report #10 proposal. This format influenced both Interfile and ACR-NEMA
  987. (DICOM). The file format is referred to as "IMAGE" in some of their articles
  988. (see references). The header and the image data  are stored as two separate
  989. files with extensions *.qhd and *.qim respectively.
  990.  
  991.         Qsh is available by anonymous ftp (see Sources section). This is a
  992. seriously large tar file, including as it does some sample images, and lots of
  993. source code, as well as some post-script documents. Subtrees are available as
  994. separate tar files.
  995.  
  996.         QSH's Motif-based menu system (qmenu) will work with OpenWindows 3.0 if
  997. SUN patch number 100444-54 for SUNOS 4.1.3 rev. A is applied. The patch is
  998. available from ftp://sunsolve1.sun.com (192.9.9.24).
  999.  
  1000.         The image access subroutines take the same parameters as the older
  1001. /usr/image package from UNC, however, the actual subroutines support the qsh
  1002. KVP and image data files.
  1003.  
  1004.         The frame buffer access subroutines take the same parameters as the
  1005. Univ. of Utah software (of the mid.  1970s). The design is based on the use of
  1006. a virtual frame buffer which is then implemented via a library for a specific
  1007. frame buffer.  There exists a version of the the display routines for X11.
  1008.  
  1009.         Conversions are not supported any longer, instead there is a commercial
  1010. product called InterFormat. InterFormat includes a qsh to Interfile conversion,
  1011. along with DICOM to qsh, and many others. Information is available from
  1012. reddy@nucmed.med.nyu.edu (David Reddy) (see InterFormat in the Sources
  1013. section).
  1014.  
  1015.         [Editorial note: this seems a bit of a shame to me - the old
  1016. distribution included lots of handy bits of information, particularly on
  1017. driving tape drives. I am advised however that the conversion stuff was pulled
  1018. out because people wanted it supported, the authors were worried they were
  1019. disclosing things perhaps they ought not to be, and NYU had switched to using
  1020. InterFormat themselves anyway. DAC.]
  1021.  
  1022.         The authors of the qsh package are:
  1023.  
  1024.                - maguire@it.kth.se (Gerald Q. (Chip) Maguire)
  1025.                - noz@nucmed.NYU.EDU (Marilyn E Noz)
  1026.  
  1027.         The following references are helpful in understanding the philosophy
  1028. behind the file format, and are included in postscript form in the qsh ftp
  1029. distribution:
  1030.  
  1031.         @Article[noz88b,
  1032.                 Key=<noz88b>,
  1033.                 Author=<M. E. Noz and G. Q. Maguire Jr.>,
  1034.                 Title=<QSH: A Minimal but Highly Portable Image Display
  1035.                        and Processing Toolkit>,
  1036.                 Journal=<Computer Methods and Programs in Biomedicine>,
  1037.                 volume=<27>,
  1038.                 month=<November>,
  1039.                 Year=<1988>,
  1040.                 Pages=<229-240>
  1041.         ]
  1042.         @Article[maguire89e,
  1043.                 Key=<maguire>,
  1044.                 Author=<G.Q. Maguire Jr., and M.E. Noz>,
  1045.                 Title=<Image Formats: Five Years after the AAPM Standard Format
  1046.                 for Digital Image Interchange>,
  1047.                 Journal=<Medical Physics>,
  1048.                 volume=<16>,
  1049.                 month=<September/October>,
  1050.                 year=<1989>,
  1051.                 pages=<818-823>,
  1052.                 comment=<Also as CUCS-369-88>
  1053.         ]
  1054.  
  1055. -- 
  1056. David A. Clunie (dclunie@flash.us.com)
  1057. In sunny Riyadh, Saudi Arabia.
  1058. Archive-name: medical-image-faq/part2
  1059. Posting-Frequency: monthly
  1060. Last-modified: Sat Feb 18 16:42:58 GMT+0300 1995
  1061. Version: 2.01
  1062.  
  1063.  
  1064. 3.  Proprietary Formats
  1065.  
  1066.     3.1 General
  1067.  
  1068.         3.1.1 SPI (Standard Product Interconnect)
  1069.  
  1070.               Used on:
  1071.  
  1072.                 - Siemens CT Somatom Plus
  1073.                 - Siemens MR Impact
  1074.                 - Siemens MR SP,SP/4000,Vision
  1075.                 - Philips MR S5 (exported images)
  1076.                 - ? what else ?
  1077.  
  1078.               SPI is a standard based on the old ACR/NEMA 1 standard, devised I
  1079. gather by Siemens and Philips, for use in a PACS environment. Who currently
  1080. maintains it and whether or not Sienet PACS systems are based on it, I am not
  1081. certain. Many machines in the workplace use it in some shape or form, or can
  1082. export files in SPI format. I gather it has been around since 1987 or so, but I
  1083. do not yet have access to the reference documents, nor permission to disclose
  1084. their contents, so much of the following is guess work or hearsay from Usenet.
  1085.  
  1086.                Like the ACR/NEMA standard, SPI is designed to define
  1087. interconnections between pieces of equipment from the physical level through to
  1088. the application level. Where appropriate it utilized relevant parts of
  1089. ACR/NEMA. Unlike ACR/NEMA, I gather that SPI is aware of the concept of
  1090. networks, objects containing information, the need to uniquely identify
  1091. instances of objects, and defines an offline file format. Thus in many ways it
  1092. sounds like the missing link between ACR/NEMA 2.0 and DICOM 3.0.
  1093.  
  1094.               SPI makes use of ACR/NEMA data elements and groups, and in
  1095. addition provides "shadow" private odd-numbered groups as dictated by the
  1096. ACR/NEMA standard for the purpose of storing additional items of information,
  1097. including a means of uniquely identifying objects, as well as allowing for
  1098. enumerated values for elements beyond those defined by ACR/NEMA. SPI also
  1099. defines a byte order for offline storage of data streams. Integers are stored
  1100. in little endian format (least significant byte first).
  1101.  
  1102.               The private groups mechanism works as follows. For each odd
  1103. numbered group (other than 0x0001,0x0003,0x0005,0x0007 and 0xffff), the
  1104. elements 0x00nn in the range 0x0010 through 0x00ff contain a single valued
  1105. string identification code that identifies the creator of the range of elements
  1106. 0xnn00 through 0xnnff. Neat eh ? For example:
  1107.  
  1108.     (0x0009,0x0010) PrivateCreatorDataElement
  1109.     (0x0009,0x0011) PrivateCreatorDataElement
  1110.     ...
  1111.     (0x0009,0x1000) DavidElement1
  1112.     (0x0009,0x1001) DavidElement2
  1113.     ...
  1114.     (0x0009,0x1100) HarryElement1
  1115.     (0x0009,0x1101) HarryElement2
  1116.  
  1117.               You get the idea. The nice thing about this scheme is that each
  1118. creator dictionary considers its elements numbered from 0x0000, but these will
  1119. be remapped to a block of elements depending on exactly which
  1120. PrivateCreatorDataElement is used in the particular data set. Hence multiple
  1121. groups from different creators can co-exist happily in the same data set, and
  1122. vary in position between data sets.
  1123.  
  1124.               Note that the group number IS taken into consideration ... a
  1125. private element with the same element offset and the same creator will have a
  1126. different meaning depending on which group it is in.
  1127.  
  1128.               SPI uses this concept extensively and defines a large dictionary
  1129. with different creators with convoluted names for different modalities and PACS
  1130. operations. A few sample elements are described here. Particularly important
  1131. are those elements for purposes that were not envisaged when ACR/NEMA 1 was
  1132. written, but are necessary to create valid DICOM 3 data sets. Such things as
  1133. FlipAngle for MR scans for example. Note that the SPI UID is not the same as a
  1134. DICOM UID, but presumably it is unique ! Note also that the creator of "SPI
  1135. RELEASE 1" is the same as "SPI Release 1" and "SPI" ... presumably someone
  1136. messed up between machines or modalities or manufacturers. For a more extensive
  1137. SPI data dictionary see the dicom3tools package from release 0.08 onwards. The
  1138. value representation fields are shown here using the modern DICOM equivalents
  1139. rather than the older, less specific ACR/NEMA names. The "owner" is what is
  1140. used as the string value of the PrivateCreatorDataElement when a range of
  1141. elements in a group is claimed.
  1142.  
  1143. Element     Owner                 Name                  VR VM
  1144.  
  1145. (0009,0010) SPI                   Comments              LO  1
  1146. (0009,0015) SPI                   UID                   LO  1
  1147. (0009,0010) SIEMENS MED           RecognitionCode       LO  1
  1148.  
  1149. (0011,0010) SPI RELEASE 1         Organ                 LO  1
  1150. (0011,0015) SPI RELEASE 1         AllergyIndication     LO  1
  1151. (0011,0020) SPI RELEASE 1         Pregnancy             LO  1
  1152. (0011,0010) SIEMENS CM VA0  CMS   RegistrationDate      DA  1
  1153. (0011,0011) SIEMENS CM VA0  CMS   RegistrationTime      TM  1
  1154. (0011,0023) SIEMENS CM VA0  CMS   UsedPatientWeight     IS  1
  1155.  
  1156. (0013,0020) SIEMENS CM VA0  CMS   PatientName           LO  1
  1157. (0013,0022) SIEMENS CM VA0  CMS   PatientId             LO  1
  1158. (0013,0030) SIEMENS CM VA0  CMS   PatientBirthdate      LO  1
  1159. (0013,0031) SIEMENS CM VA0  CMS   PatientWeight         DS  1
  1160. (0013,0035) SIEMENS CM VA0  CMS   PatientSex            LO  1
  1161. (0013,0040) SIEMENS CM VA0  CMS   ProcedureDescription  LO  1
  1162. (0013,0042) SIEMENS CM VA0  CMS   RestDirection         LO  1
  1163. (0013,0044) SIEMENS CM VA0  CMS   PatientPosition       LO  1
  1164.  
  1165. (0019,0010) SIEMENS CM VA0  CMS   NetFrequency          DS  1
  1166. (0019,0011) SIEMENS CM VA0  ACQU  SequenceFileName      LO  1
  1167. (0019,0021) SIEMENS CT VA0  GEN   Exposure              DS  1
  1168. (0019,0026) SIEMENS CT VA0  GEN   GeneratorVoltage      DS  1
  1169. (0019,0050) SIEMENS MR VA0  GEN   NumberOfAverages      IS  1
  1170. (0019,0060) SIEMENS MR VA0  GEN   FlipAngle             DS  1
  1171. (0019,0012) SIEMENS MR VA0  COAD  MagneticFieldStrength DS  1
  1172.  
  1173. (0021,0010) SIEMENS MED           Zoom                  DS  1
  1174. (0021,0011) SIEMENS MED           Target                DS  2
  1175. (0021,0020) SIEMENS CM VA0  CMS   FoV                   DS  2
  1176. (0021,0060) SIEMENS CM VA0  CMS   ImagePosition         DS  3
  1177. (0021,0061) SIEMENS CM VA0  CMS   ImageNormal           DS  3
  1178. (0021,006a) SIEMENS CM VA0  CMS   ImageRow              DS  3
  1179. (0021,006b) SIEMENS CM VA0  CMS   ImageColumn           DS  3
  1180. (0021,0039) SIEMENS MR VA0  GEN   SlabThickness         DS  1
  1181. (0021,0070) SIEMENS MR VA0  GEN   NumberOfEchoes        IS  1
  1182.  
  1183.     3.2 CT
  1184.  
  1185.         3.2.1 General Electric
  1186.  
  1187.               Now we get to the meaty part. After years of being faced with the
  1188. problem of either a) hours of detective work, or b) tediously tracking down the
  1189. name of the responsible person and exercising a non-disclosure agreement,
  1190. General Electric (or Generous Electric as I heard them described the other day)
  1191. now really are being generous, as well as sensible, and are making their image
  1192. format description documents freely available. For details see the contact
  1193. section later on. In the meantime, both for historical completeness,
  1194. educational purposes, and for those who can't wait for document to come in the
  1195. mail, a summary of the relevant formats and decompression algorithms is
  1196. provided here.
  1197.  
  1198.               3.2.1.1 CT 9800
  1199.  
  1200.                       3.2.1.1.1 Image data
  1201.  
  1202.                                 - "block format" header
  1203.                                 - perimeter encoding
  1204.                                 - optional DPCM compression
  1205.                                 - Data General host (various)
  1206.                                 - RDOS (yuck !)
  1207.  
  1208.                                 Almost everyone in this field has at some stage
  1209. encountered the dreaded CT 9800 format. The world is divided into two groups of
  1210. people ... those who have seen the documents or the critical piece of code in
  1211. another program or have been given a handy hint, and those who will never
  1212. figure out the format themselves.
  1213.  
  1214.                                 Essentially the format fits into the "block
  1215. format" described earlier, with pointers to each of the major header
  1216. components. Rarely, if ever, does one encounter a file that doesn't have the
  1217. same size blocks in the same place, so most people treat it as a fixed layout.
  1218. I believe that reformatted images may have another header stored in there, but
  1219. I have never tested for it.
  1220.  
  1221.                                 The data itself is stored in one of two forms
  1222. depending on whether compression is selected or not during archival. In the
  1223. uncompressed form, a type of perimeter encoding is used (see later section) in
  1224. which for an essentially circular object, the outer parts of a rectangular
  1225. image are discarded (and expected to be filled in with a background pixel value
  1226. during reconstitution of the image). In the case of the CT9800 then, the image
  1227. pixel data is interpreted using a map, which contains an entry for each row of
  1228. the image (either 256, 320 or 512 entries) which specifies the length of the
  1229. row that is actually stored, centered about the midline of the image. This
  1230. obviously saves a lot of space.
  1231.  
  1232.                                  If compression is selected on one of the later
  1233. model machines, then a form of Differential Pulse Code Modulation is used, in
  1234. which advantage is taken of the fact that not all the bits of a 16 bit word are
  1235. need to store a CT value. I gather only 12 bits of data are actually
  1236. significant, but one can theoretically represent 15 using this scheme.
  1237. Essentially, the first 16 bit word is read and used as is. Then another byte is
  1238. read. If its most significant bit is set, then the remaining 7 bits represent a
  1239. signed difference value relative to the previous pixel. If its most significant
  1240. bit is not set, then the difference must have exceeded the range of 7 bits, and
  1241. hence the next byte is read to complete a valid 16 bit word (15 bits really)
  1242. which is the actual pixel value. The really neat thing about this scheme is
  1243. that the same algorithm can be used for compressed or uncompressed data as an
  1244. uncompressed stream of words will never have the most significant bit set !
  1245.  
  1246.                                   The following piece of C++ code pulled out of
  1247. a CT9800 to DICOM translator will give you the general idea. Note that the
  1248. perimeter encoding map has already been read in. Note in particular the need to
  1249. deal with sign extension of the difference value. Also note that the code
  1250. doesn't handle the first pixel specially because its high bit will not be set.
  1251.  
  1252. static void
  1253. copy9800image(ifstream& instream,DC3ofstream& outstream,
  1254.           Uint16 resolution,Uint16 *map)
  1255. {
  1256.     unsigned i;
  1257.     Int16 last_pixel;
  1258.  
  1259.     last_pixel=0;
  1260.     for (i=0; i<resolution; ++i) {
  1261.         unsigned line    = map[i];
  1262.         unsigned start    = resolution/2-line;
  1263.         unsigned end    = start+line*2;
  1264.         unsigned j;
  1265.  
  1266.         // Pad the first "empty" part of the line ...
  1267.         for (j=0; j<start; j++) outstream.write16(0);
  1268.  
  1269.         // Copy the middle of the line (compressed or uncompressed)
  1270.         while (start<end) {
  1271.             unsigned char byte;
  1272.             instream.read(&byte,1);
  1273.             if (!instream) break;
  1274.             if (byte & 0x80) {
  1275.                 signed char delta;
  1276.                 if (byte & 0x40) {
  1277.                     delta=byte;
  1278.                 }
  1279.                 else {
  1280.                         delta=byte & 0x3f;
  1281.                 }
  1282.                 last_pixel+=delta;
  1283.             }
  1284.             else {
  1285.                 last_pixel=byte << 8;
  1286.                 instream.read(&byte,1);
  1287.                 if (!instream) break;
  1288.                 last_pixel+=byte;
  1289.             }
  1290.             outstream.write16((Uint16)last_pixel & 0x0fff);
  1291.             ++start;
  1292.         }
  1293.  
  1294.         // Pad the last "empty" part of the line ...
  1295.         for (j=end; j<resolution; j++) outstream.write16(0);
  1296.     }
  1297. }
  1298.  
  1299.                                 What about the rest of the header information
  1300. and where is this map stored anyway ? Well, the file is described as a series
  1301. of 256 by 16 bit word blocks, blocks numbered from 0, words numbered from 1,
  1302. integers are 16 bit words, as follows:
  1303.  
  1304.         block 0 - global header
  1305.  
  1306.                word 34   - Int - pointer to global header
  1307.                word 35   - Int - pointer to exam header
  1308.                word 36   - Int - pointer to image header
  1309.                word 37   - Int - pointer to image header2
  1310.                word 38   - Int - pointer to image map
  1311.                word 39   - Int - pointer to image data
  1312.                word 40   - Int - number of blocks in global header
  1313.                word 41   - Int - number of blocks in exam header
  1314.                word 42   - Int - number of blocks in image header
  1315.                word 43   - Int - number of blocks in image header2
  1316.                word 44   - Int - number of blocks in image map
  1317.                word 45   - Int - number of blocks in image data
  1318.  
  1319.                                 Now almost always the layout is as follows, for
  1320. non-reformatted images:
  1321.  
  1322.         block 0 - global header
  1323.         block 1 - exam header
  1324.         block 2 - image header
  1325.         block 3 - image header 2
  1326.         block 4 - image map
  1327.         block 6 - image data
  1328.  
  1329.                                 For reformatted images the layout is said to be
  1330. different, but I have never seen a description of the contents of the so-called
  1331. "arrange header", nor do I know where in the global header the pointer and
  1332. length are stored:
  1333.  
  1334.         block 0 - global header
  1335.         block 1 - exam header
  1336.         block 2 - image header
  1337.         block 3 - image header 2
  1338.         block 4 - arrange header
  1339.         block 9 - image map
  1340.         block 11 - image data
  1341.  
  1342.                                 Some of the more important contents of the
  1343. various headers are listed here. For more complete information get the
  1344. documents from GE or study any one of a number of programs kicking around to
  1345. dump the header of this kind of file (see sources later). Integers are 16 bit
  1346. words, ascii strings are Fortran style specifications with two characters per
  1347. word, and reals are 4 bytes long (see Host machines - Data General):
  1348.  
  1349.         block 0 - global header
  1350.  
  1351.                word 17-23    - 7A2  - file name
  1352.  
  1353.         block 1 - exam header
  1354.  
  1355.                word  4       - Int  - exam number
  1356.                word  5-11    - 7A2  - exam number
  1357.                word  12-17   - 6A2  - patient id
  1358.                word  18-32   - 15A2 - patient name
  1359.  
  1360.         block 2 - image header
  1361.  
  1362.                word  11      - Int  - position (study) number
  1363.                word  13      - Int  - group type (2=scout,3=standard,4=dynamic)
  1364.                word  14      - Int  - group number
  1365.                word  47      - Int  - scan number
  1366.                word  48      - Int  - image number
  1367.                word  50      - Int  - patient orientation (1=head first,2=feet)
  1368.                word  51      - Int  - AP orientation (1=prone,2=sup,3=lt,4=rt)
  1369.                word  55      - Int  - contrast (0=no,1=yes)
  1370.                word  93-94   - Real - gantry tilt
  1371.                word  95-96   - Real - table height mm
  1372.                word  97-98   - Real - axial table location mm
  1373.                word  124     - Int  - image size (256,320,512) NOT FOR SCOUTS
  1374.                word  132     - Int  - detectors/view        - width  for scouts
  1375.                word  137     - Int  - compressed views/scan - height for scouts
  1376.                word  144-145 - Real - X diameter of recon mm
  1377.                word  146-147 - Real - Y diameter of recon mm
  1378.                word  155-156 - Real - magnification factor
  1379.                word  157-158 - Real - X center
  1380.                word  159-160 - Real - Y center
  1381.                word  175     - Int  - image map used (1=yes,2=no)
  1382.                word  218     - Int  - file type (1=prospective,2=scout,
  1383.                                       3=retrospective,4=segmented,
  1384.                                       5=screen save,6=plot)
  1385.                word  219     - Int  - data range (number of bits)
  1386.                word  236     - Int  - scout orientation (0=ap,1=lateral)
  1387.                                       (the 9800 rotates the scout magically)
  1388.  
  1389.                                 It is important to check the filetype and image
  1390. map used entries, particularly if trying to read scouts rather just prospective
  1391. images. If the map is not in use, it is filled with zeroes and hence if the
  1392. flag is not checked a simplistic demapping algorithm will fail. Furthermore the
  1393. number of rows and columns in the image is not specified as such. For
  1394. prospective images, the imagesize field is valid for both (images are square).
  1395. For scouts, one must use the detectors/view field for the width and the
  1396. compressed views/scan field as the height.
  1397.  
  1398.                                 The filename entry is quite useful. Therein is
  1399. stored the RDOS filename of the image, which follows the following convention:
  1400.  
  1401.         seeeeeppdd.tt
  1402.  
  1403.         s     = originating scan station id
  1404.         eeeee = exam number
  1405.         pp    = prs number (position related set)
  1406.         dd    = image number
  1407.         tt    = file type
  1408.                 YP = prospective
  1409.                 YV = scout
  1410.                 YR = retrospective
  1411.                 YG = segmented recon
  1412.                 YS = screen save
  1413.                 YL = plot
  1414.                 YF = reformatted
  1415.  
  1416.         eg. B038500165.YP
  1417.  
  1418.                                 Having said this, my GE 9800 stores its scouts
  1419. on tape at least with no file extension at all, rather than the .YV that it is
  1420. supposed to use.
  1421.  
  1422.                       3.2.1.1.2 Tape format
  1423.  
  1424.                                 Probably more CT images have been exchanged for
  1425. clinical and research purposes using GE 9800 9-track magnetic tapes than any
  1426. other means. These things are just ubiquitous, particularly considering the
  1427. proliferation of services providing 3D reconstruction and fabrication a few
  1428. years ago. Fortunately the format is easy to deal with. The tapes are produced
  1429. on a primitive DG tape drive and hence are never more than 1600bpi. The first
  1430. thing on the tape is a directory consisting of two 4096 word (8192 byte)
  1431. records, then two EOF marks, then 20" of blank tape (because the directory
  1432. keeps getting updated) followed by image files each separated by an EOF mark
  1433. and finally an additional EOF mark after the last file.
  1434.  
  1435.                                 I won't describe the tape directory format here
  1436. unless someone specifically asks for it, though it is very simple. I usually
  1437. just read everything on the tape and sort the files out later. Remember that
  1438. their filenames are stored in the global header.
  1439.  
  1440.                                 Don't forget to set the input magnetic tape
  1441. record size to 8192 bytes when you are copying these files. If you don't do
  1442. this some systems quietly truncate each record to some default size. It took me
  1443. a week to figure out why my files were screwed up the first time I tried this
  1444. on a DG under AOS/VS (I was desperate and using a networked Signa to read files
  1445. off a non-networked 9800).
  1446.  
  1447.                                 A simple script to read an entire tape from a
  1448. SCSI tape drive /dev/nrst1 under SunOS, which will peek in each image file to
  1449. extract the correct filename (simpler than trying to decipher the directory)
  1450. looks like
  1451. this:
  1452.  
  1453. #!/bin/sh
  1454.  
  1455. echo "Rewinding"
  1456. mt -f /dev/nrst1 rewind
  1457.  
  1458. echo "Extracting directory ..."
  1459. dd if=/dev/nrst1 ibs=8192 of=TAPEDIR
  1460.  
  1461. while dd if=/dev/nrst1 ibs=8192 of=tape.tmp
  1462. do
  1463.     name=`dd if=tape.tmp ibs=16 skip=2 count=1 2>/dev/null`
  1464.     if [ -z "$name" ]; then break; fi
  1465.     mv tape.tmp $name
  1466.     echo "Extracted $name"
  1467. done
  1468.  
  1469. echo "Rewinding"
  1470. mt -f /dev/nrst1 rewind
  1471. echo "Finished"
  1472.  
  1473.                       3.2.1.1.2 Raw data
  1474.  
  1475.                                 No idea about this one ... I have never had the
  1476. need or seen any documention. Anyone who does or has please fill in this space.
  1477.  
  1478.               3.2.1.2 CT Advantage - Genesis
  1479.  
  1480.                       General Electric now uses the same Sun based architecture
  1481. for its Advantage CT and Signa 5X MR family, referred to as Genesis, and hence
  1482. the general details of this scheme will be discussed under the GE Signa 5X -
  1483. Genesis section. Specifics related to the CT modality will be described here.
  1484.  
  1485.                       3.2.1.2.1 Image data
  1486.  
  1487.                                 The Image Extract Tool is used in the same way
  1488. as on the Signa to extract an image from the database into a single file,
  1489. either asis or using the requested compression and packing mode. The Genesis
  1490. file contains headers consisting of several components in common with MR and
  1491. then a specific CT or MR header. Theroetically, one should be able to use
  1492. "/usr/g/insite/bin/ximg -g" to extract a prototype C header file describing the
  1493. file format, as on the Signa, though last time I tried this on a High Speed
  1494. Advantage this didn't work. Some of the more interesting fields in the CT image
  1495. header include:
  1496.  
  1497.         image header - for CT (1020 bytes long):
  1498.  
  1499.                 26  - float    - slice thickness (mm)
  1500.                 30  - short    - image matrix size - X
  1501.                 32  - short    - image matrix size - Y
  1502.                 34  - float    - display field of view - X
  1503.                 38  - float    - display field of view - Y
  1504.                 42  - float    - image dimension - X
  1505.                 46  - float    - image dimension - Y
  1506.                 50  - float    - pixel size - X
  1507.                 54  - float    - pixel size - Y
  1508.                 58  - char[14] - pixel data ID
  1509.                 72  - char[17] - iv contrast agent
  1510.                 89  - char[17] - oral contrast agent
  1511.                 194 - float    - table start Location
  1512.                 198 - float    - table end Location
  1513.                 202 - float    - table speed (mm/sec)
  1514.                 206 - float    - table height
  1515.                 224 - float    - gantry tilt (degrees)
  1516.  
  1517.                       3.2.1.2.2 Archive format
  1518.  
  1519.                                 See the Archive format for the Signa 5X.
  1520.  
  1521.                       3.2.1.2.3 Raw data
  1522.  
  1523.                                 Again, unknown. Please fill in this space.
  1524.  
  1525.               3.2.1.3 Pace
  1526.  
  1527.                       I don't have one of these, but I do have the Japanese
  1528. documents with English annotations. Anyone who can send me a few sample files
  1529. on a floppy or something, please let me know, so I can test out the format and
  1530. elaborate on it here.
  1531.  
  1532.               3.2.1.4 Sytec
  1533.  
  1534.                       I don't have one of these either, and it turns out that
  1535. the format is NOT the same as the Pace as GE Milwaukee initially thought. The
  1536. format may be shared with the Vectra, but this is not known for certain. I do
  1537. have a few sample images and have worked out many of the values in the headers.
  1538. The format may be available from Yokogawa in Japan. Milwaukee apparently
  1539. doesn't have it.
  1540.  
  1541.                       The host is an MS-DOS clone using the J-DOS operating
  1542. system, a Japanese version of DOS to handle 16 bit Kanji characters. Alan
  1543. Rowberg tells me it has a 5.25" drive that writes disks that are unreadable by
  1544. anything else in the universe.
  1545.  
  1546.                       The images have a header of 3752 bytes and are followed
  1547. by 16-bit signed integers. The surround is -1500 which is probably -1500 H.U.
  1548. The sample files I ahd did not use any form of compression.
  1549.  
  1550.                       The data formats are big-endian. Fortuitously the
  1551. date/time format is the same as unix ... a 32 bit unsigned integer containing
  1552. seconds since an epoch of 00:00:00 GMT 1 Jan 1970. Floats are IEEE format as
  1553. follows:
  1554.  
  1555.     bit  31        sign (s)    (0 is +ve)
  1556.  
  1557.     bits 30-23    exponent (e)
  1558.             - unsigned integer
  1559.             - e == 0 for denormalized numbers
  1560.             - 0 < e < 255 for normalized numbers
  1561.             - e == 255 for other reserved operands
  1562.  
  1563.     bits 22-0    significand (f)
  1564.  
  1565.     Normalized numbers:
  1566.         Exponent:
  1567.             - bias 127
  1568.             - range 0 < e < 255
  1569.         Significand:
  1570.             - interpreted as 1.f
  1571.             - range 1.0 <= f < 2.0
  1572.  
  1573.         (-1)^s * 2^(e-127) * 1.f
  1574.  
  1575.     Denormalized numbers:
  1576.         Exponent:
  1577.             - e == 0
  1578.             - bias 126
  1579.         Significand:
  1580.             - interpreted as 0.f
  1581.             - range f != 0
  1582.  
  1583.         (-1)^s * 2^(-126) * 0.f
  1584.  
  1585.     Signed Infinities:
  1586.         - e == 255
  1587.         - f == 0
  1588.  
  1589.     Not-a-numbers:
  1590.         - e == 255
  1591.         - f != 0
  1592.  
  1593.                       The head first/feet first and prone/supine fields in the
  1594. Sytec file are not known. The sense and identification of corners in the Sytec
  1595. sample files was done by guess work, and may be wrong if the samples weren't
  1596. scanned head first supine, and the images are not supposed to be looked at from
  1597. bottom up in the usual convention.
  1598.  
  1599.                       The header is 3752 bytes long. The known header values
  1600. are (byte offsets from 0):
  1601.  
  1602.       Offset   Type         Meaning               Units or values
  1603.  
  1604.         7      string       ModelNumber
  1605.  
  1606.         126    string       Organization
  1607.         204    string       PatientID
  1608.         217    string       PatientName
  1609.  
  1610.         328    datetime     ExamDateTime
  1611.         402    string       ExamDescription
  1612.         425    string       Modality
  1613.         444    string       ExamStationID
  1614.  
  1615.         1164   int16        ExamNumber
  1616.         1166   int16        SeriesNumber
  1617.         1172   datetime     SeriesDate
  1618.         1176   string       SeriesDescription
  1619.         1206   string       SeriesStationID
  1620.  
  1621.         1224   int16        ScanType                # 1=axial,3=scout
  1622.         1240   string       AnatomicalReference
  1623.  
  1624.         1280   float32      SeriesStartLocation
  1625.         1288   float32      SeriesEndLocation
  1626.  
  1627.         2192   u_int16      ImageExamNumber
  1628.         2194   u_int16      ImageSeriesNumber
  1629.         2196   u_int16      ImageNumber
  1630.         2204   datetime     ScanDateTime
  1631.         2208   float32      ScanDuration            #? secs
  1632.         2212   float32      SliceThickness          # mm
  1633.         2216   u_int16      XMatrix
  1634.         2218   u_int16      YMatrix
  1635.         2220   float32      FieldOfView             # mm
  1636.         2224   float32      ScoutLength             # mm
  1637.         2228   float32      XDimension              # mm
  1638.         2232   float32      YDimension              # mm
  1639.         2236   float32      XPixelSize              # mm
  1640.         2240   float32      YPixelSize              # mm
  1641.  
  1642.         2310   u_int16      ScoutOrientation        # 0=none,1=ap,2=lateral
  1643.         2316   float32      TablePosition           # mm
  1644.         2320   float32      SliceCenterX            # mm
  1645.         2324   float32      SliceCenterY            # mm
  1646.         2328   float32      SliceCenterZ            # mm
  1647.         2332   float32      NormalVectorX           # unitized
  1648.         2336   float32      NormalVectorY           # unitized
  1649.         2340   float32      NormalVectorZ           # unitized
  1650.         2344   float32      TopRightHandCornerX     # mm
  1651.         2348   float32      TopRightHandCornerY     # mm
  1652.         2352   float32      TopRightHandCornerZ     # mm
  1653.         2356   float32      TopLeftHandCornerX      # mm
  1654.         2360   float32      TopLeftHandCornerY      # mm
  1655.         2364   float32      TopLeftHandCornerZ      # mm
  1656.         2368   float32      BottomLeftHandCornerX   # mm
  1657.         2372   float32      BottomLeftHandCornerY   # mm
  1658.         2376   float32      BottomLeftHandCornerZ   # mm
  1659.         2384   float32      ScoutStartLocation      # mm
  1660.         2388   float32      ScoutEndLocation        # mm
  1661.         2408   int32        GeneratorVoltage        # kVP
  1662.         2412   int32        TubeCurrent             # mA
  1663.         2416   float32      GantryTilt              # degrees
  1664.  
  1665.         2716   float32      XReconOffset            # mm
  1666.         2720   float32      YReconOffset            # mm
  1667.  
  1668.         3256   int32        BitsPerSample
  1669.         3264   int32        DefaultWindowWidth
  1670.         3268   int32        DefaultWindowLevel
  1671.  
  1672.         3.2.2 Siemens
  1673.  
  1674.               3.2.1.1 Somatom DR
  1675.  
  1676.                       - NOT in SPI format
  1677.                       - fixed format
  1678.                       - files 133120 bytes (for 256 square images)
  1679.                       - image pixel data 256*256*2 little endian
  1680.                       - image pixel offset 2048 bytes
  1681.                       - same for axial images and topograms (scouts)
  1682.  
  1683.                       This description pertains to the DR family, and possibly
  1684. also earlier Siemens CT models, but I have no files from these to test.
  1685.  
  1686.                       The files are in fixed format (cf. the early Magnetom
  1687. format which is similar, but has block pointers) with three major blocks of
  1688. entries:
  1689.  
  1690.         - binary data      - offset 0    - 512 bytes
  1691.         - text overlay     - offset 512  - 960 bytes plus 676 bytes free
  1692.         - image pixel data - offset 2048 - 131072 bytes
  1693.  
  1694.                       The binary data block is filled with the usual cryptic
  1695. enumerated values and useful parameters. Some of the more interesting ones are:
  1696.  
  1697.         - binary data block:
  1698.  
  1699.                 66  - byte        - archive mode (0=raw data,B=256,C=512)
  1700.                 67  - byte        - archive mode (0=uncompressed,
  1701.                                     2=compressed)
  1702.  
  1703.                 72  - short       - matrix size (256 or 512)
  1704.  
  1705.                 130 - byte        - scan mode (P=image data,R=raw data)
  1706.                 131 - byte        - scan mode (0=tomogram,Q=quick,S=serial,
  1707.                                     C=cardiac,T=topogram,X=test,H=chronogram)
  1708.                 132 - short       - fov - mm
  1709.                 134 - short       - scan time - secs * 10
  1710.                 136 - short       - kv
  1711.                 138 - short       - dose - maS
  1712.                 140 - short       - slice thickness - mm
  1713.                 142 - short       - gantry tilt - degrees
  1714.                 144 - short       - table position - mm
  1715.                 146 - short       - table height - mm
  1716.                 148 - short       - scan mode (1=standard(360),
  1717.                                     2=quickscan(240),4=topogram)
  1718.  
  1719.                 236 - short       - view direction (1=cranial,-1=caudal)
  1720.                 238 - byte        - head position (0=head first,
  1721.                                     1=feet first)
  1722.                 239 - byte        - patient position (0=supine,
  1723.                                     1=prone,2=r lat dec,3=l lat dec)
  1724.  
  1725.                 310 - short       - window width  A
  1726.                 312 - short       - window center A
  1727.                 314 - short       - window width  B
  1728.                 316 - short       - window center B
  1729.  
  1730.                       Unfortunately, the patient identification information is
  1731. NOT stored in the binary data block, rather one has to extract it from the
  1732. image text overlay block, which consists of 960 characters (24 lines of 40
  1733. characters WITHOUT carriage control characters) in a fixed format. This is
  1734. where what you see overlayed on the filmed images is stored. Some of these
  1735. values are duplicates of what is in the binary data block, but things like the
  1736. patient name and so on are here and nowhere else :(
  1737.  
  1738.                     0123456789012345678901234567890123456789
  1739.  
  1740.                 0   SOMATOM DR2       ST. ELSEWHERE GEN HOSP
  1741.                 40  999999-9999  JOHN DOE                EF2
  1742.                 80  01-JAN-90        FRONT               35B
  1743.                 120 13:31:22                            H/SP
  1744.                 160
  1745.                 200 SCAN 60                             L
  1746.                 240                                     E
  1747.                 280                                     F
  1748.                 320                                     T
  1749.                 360
  1750.                 400
  1751.                 440
  1752.                 480
  1753.                 520
  1754.                 560
  1755.                 600
  1756.                 640
  1757.                 680
  1758.                 720 TI 5
  1759.                 760 KV 125
  1760.                 800 AS .35
  1761.                 840 SL 2
  1762.                 880 GT 0
  1763.                 920 TP 144
  1764.  
  1765.         - text overlay block: (some of this is guess work)
  1766.  
  1767.                 0   - char[14]    - product
  1768.                 15  - char[25]    - hospital name
  1769.                 40  - char[12]    - patient number
  1770.                 53  - char[22]    - patient name
  1771.                 80  - char[2]     - date - dd
  1772.                 83  - char[3]     - date - mmm
  1773.                 87  - char[2]     - date - yy
  1774.                 120 - char[2]     - time - hh
  1775.                 123 - char[2]     - time - mm
  1776.                 126 - char[2]     - time - ss
  1777.                 156 - char[1]     - H=head first,F=feet first
  1778.                 158 - char[2]     - SP=supine,PR=prone,
  1779.                                     RP=right lateral decubitus,
  1780.                                     LP=left lateral decubitus
  1781.                 205 - char[4]     - slice number
  1782.                 723 - char[4]     - scan time - secs
  1783.                 763 - char[4]     - kv
  1784.                 803 - char[4]     - dose - AmpS
  1785.                 843 - char[4]     - slice thickness - mm
  1786.                 883 - char[4]     - gantry tilt - degrees
  1787.                 923 - char[4]     - table position - mm
  1788.  
  1789.                       If anyone knows what "EF2" and "35B" stand for I would
  1790. love to know - I presume they are something like the filter used, or field of
  1791. view or something ?
  1792.  
  1793.                       Also the DR family don't seem to be aware of the concept
  1794. of a hierarchy of examination/study and series numbering, which makes it
  1795. annoying to try to import them into PACS systems :( Correct me if I am wrong
  1796. but they just seem to keep bumping up the slice number for each patient as each
  1797. group of scans is done.
  1798.  
  1799.               3.2.2.2 Somatom Plus
  1800.  
  1801.                       Siemens version of SPI, containing the following private
  1802. data elements. Note that there is overlayed data in the high four bytes of the
  1803. image pixel data, and that there seems to be a bunch of padding in the middle.
  1804. The intent seems to be to store the "original header" and the image pixel data
  1805. at accessible, presumably standard locations, presumably indexed by the byte
  1806. offsets and lengths described in group 9. This is a shame because it seems that
  1807. none of the really interesting CT attributes have been included in the SPI
  1808. form, although SPI private tags are available for lots of CT parameters. I
  1809. don't have one of these image to test this theory, someone just sent me an
  1810. output of the attribute dump.
  1811.  
  1812. SPI private tags:
  1813.  
  1814. (0009,0010)                                      <SPI RELEASE 1>
  1815. (0009,0011)                                        <SIEMENS MED>
  1816. (0009,1011) SPI RELEASE 1   UID     <049S03CT031995011712072452>
  1817. (0009,1040) SPI RELEASE 1   DataObjectSubtype           [0x0000]
  1818. (0009,1041) SPI RELEASE 1   DataObjectSubtype         <IMA TOPO>
  1819. (0009,1110) SIEMENS MED     RecognitionCode             <CT 1.4>
  1820. (0009,1130) SIEMENS MED     ByteOffsetOfOriginalHeader
  1821. (0009,1131) SIEMENS MED     LengthOfOriginalHeader
  1822. (0009,1140) SIEMENS MED     ByteOffsetOfPixelmatrix
  1823. (0009,1141) SIEMENS MED     LengthOfPixelmatrixInBytes
  1824.  
  1825. (0011,0010)                                      <SPI RELEASE 1>
  1826.  
  1827. (0021,0010)                                        <SIEMENS MED>
  1828. (0021,1010) SIEMENS MED     Zoom                          <01.0>
  1829. (0021,1011) SIEMENS MED     Target              <000.000\00.000>
  1830. (0021,1012) SIEMENS MED     TubeAngle                     <0270>
  1831. (0021,1020) SIEMENS MED     ROIMask                     [0xf000]
  1832.  
  1833. Overlay descriptions (overlays already in image pixel data):
  1834.  
  1835. (6000,0040)                 ROI                              <G>
  1836. (6000,0102)                 BitPosition                 [0x000c]
  1837. (6000,0102)                 OverlayLocation             [0x7fe0]
  1838.  
  1839. (6002,0040)                 ROI                              <G>
  1840. (6002,0102)                 BitPosition                 [0x000d]
  1841. (6002,0102)                 OverlayLocation             [0x7fe0]
  1842.  
  1843. (6004,0040)                 ROI                              <G>
  1844. (6004,0102)                 BitPosition                 [0x000e]
  1845. (6004,0102)                 OverlayLocation             [0x7fe0]
  1846.  
  1847. (6006,0040)                 ROI                              <G>
  1848. (6006,0102)                 BitPosition                 [0x000f]
  1849. (6006,0102)                 OverlayLocation             [0x7fe0]
  1850.  
  1851. More SPI private stuff ... padding and original header ...
  1852.  
  1853. (7001,0010)                                        <SIEMENS MED>
  1854. (7001,1010) SIEMENS MED     Dummy
  1855.  
  1856. (7003,0010)                                        <SIEMENS MED>
  1857. (7003,1010) SIEMENS MED     Header
  1858.  
  1859. (7005,0010)                                        <SIEMENS MED>
  1860. (7005,1010) SIEMENS MED     Dummy
  1861.  
  1862.               3.2.2.3 Somatom AR
  1863.  
  1864.               Unknown, but likely to be SPI unless Siemens have second sourced
  1865. this machine like Philips does theirs from Hitachi or GE theirs from Yokogawa !
  1866.  
  1867.         3.2.3 Philips - Big black hole
  1868.  
  1869.         3.2.4 Picker
  1870.  
  1871.               Grey hole perhaps. This information probably pertains to the IQ
  1872. and PQ CT models, though I have no sample images to experiment with yet. I am
  1873. told that:
  1874.  
  1875.               - axial images are 512x512
  1876.               - pilot images are 1024x1024
  1877.               - uncompressed images are 12 bits stored in 16 bits
  1878.               - don't know how to handle compression scheme
  1879.               - raster order is as usual, by row, TLHC first
  1880.               - 8k header to be skipped
  1881.  
  1882.         3.2.5 Toshiba - another black hole
  1883.         3.2.6 Hitachi - another black hole
  1884.         3.2.7 Shimadzu - another black hole
  1885.         3.2.8 Elscint - another black hole
  1886.  
  1887. -- 
  1888. David A. Clunie (dclunie@flash.us.com)
  1889. In sunny Riyadh, Saudi Arabia.
  1890. Archive-name: medical-image-faq/part2
  1891. Posting-Frequency: monthly
  1892. Last-modified: Sat Feb 18 16:42:58 GMT+0300 1995
  1893. Version: 2.01
  1894.  
  1895.  
  1896.     3.3 MR
  1897.  
  1898.         3.3.1 General Electric
  1899.  
  1900.               3.3.1.1 Signa 3X and 4X
  1901.  
  1902.                       3.3.1.1.1 Image data
  1903.  
  1904.                                 - "fixed format" header
  1905.                                 - image data is not compressed
  1906.                                 - image data fixed offset 14336 bytes
  1907.                                 - Data General host
  1908.                                 - AOS/VS
  1909.  
  1910.                                 The image files are of fixed layout, described
  1911. here as a series of 256 by 16 bit word blocks (512 bytes), blocks numbered from
  1912. 0. The headers start at the following block offsets:
  1913.  
  1914.         block 0  - length 4 blocks   - System configuration
  1915.         block 4  - length 2 blocks   - Site customization
  1916.         block 6  - length 2 blocks   - Study header
  1917.         block 8  - length 2 blocks   - Series header
  1918.         block 10 - length 2 blocks   - Image header
  1919.         block 12 - length 4 blocks   - Raw database header
  1920.         block 16 - length 10 blocks  - Pulse sequence description
  1921.         block 26 - length 2 blocks   - Pixel map (? not ever used)
  1922.         block 28 - length 256 blocks - Image data
  1923.  
  1924.                                 As decribed earlier, the header is a fixed
  1925. length of 14336 bytes, after which the uncompressed image data starts.
  1926.  
  1927.                                 Some of the more important fields are described
  1928. here. Integers are 16 bit words (big-endian), ascii strings are Fortran style
  1929. specifications with length in bytes, and reals are 4 bytes long (see Host
  1930. machines - Data General), word offsets are numbered from 0:
  1931.  
  1932.         block 6 - study header
  1933.  
  1934.                word  32      - 5A   - Study number
  1935.                word  39      - 9A   - Date of study (dd-mmm-yy)
  1936.                word  47      - 8A   - Time of study (hh:mm:ss)
  1937.                word  54      - 32A  - Patient name
  1938.                word  70      - 12A  - Patient ID
  1939.                word  78      - 3A   - Age xxx years or xxD or W or M or Y
  1940.                word  80      - 1A   - Sex
  1941.  
  1942.         block 8 - series header
  1943.  
  1944.                word  31      - 3A   - Series number
  1945.                word  52      - 120A - Series description
  1946.                word  112     - Int  - Series type (0=normal,1=screensave,
  1947.                                           2=composite)
  1948.                word  113     - Int  - Coil type (0=head,1=body,2=surface)
  1949.                word  114     - 16A  - Coil name
  1950.                word  122     - Int  - Contrast description
  1951.                word  138     - Int  - Plane type (0=axial,1=sagittal,2=coronal,
  1952.                                           3=oblique,4=screen save)
  1953.                word  147     - Int  - Image mode (0=2D single,1=2D multiple,
  1954.                                           2=3D volume,3=cine,4=spectroscopy)
  1955.                word  148     - Int  - Field strength (gauss)
  1956.                word  149     - Int  - Pulse sequence (0=memp,1=ir,2=ps,3=rm,
  1957.                                           4=rmge,5=gre,6=vemp,7=mpgr,8=mpgrv,
  1958.                                           9=mpirs,10=mpiri,11=3d/gre,
  1959.                                           12=cine/gre,13=spgr,14=sspf,
  1960.                                           15=cin/spgr,16=3d/spgr,17=fse,
  1961.                                           18=fve,19=fspgr,20=fgr,21=fmpspgr,
  1962.                                           22=fmpgr,23=fmpir,24=probe.s,
  1963.                                           25=probe.p)
  1964.                word  150     - Int  - Pulse sequence subtype (0=chopper)
  1965.                word  151     - Real - Field of view mm
  1966.                word  153     - Real - Center (3 values;R+L-,A+P-,S+I-)
  1967.                word  159     - Int  - Orientation (0=supine,1=prone,2=Lt,3=Rt)
  1968.                word  160     - Int  - Position (0=head first,1=feet first)
  1969.                word  161     - 32A  - Longitudinal anatomical reference
  1970.                word  177     - 32A  - Vertical anatomical reference
  1971.                word  199     - Int  - Scan matrix X
  1972.                word  200     - Int  - Scan matrix Y
  1973.                word  201     - Int  - Image matrix
  1974.  
  1975.         block 10 - image header
  1976.  
  1977.                word  44      - Int  - Image number
  1978.                word  73      - Real - Image location
  1979.                word  75      - Real - Table position
  1980.                word  77      - Real - Image thickness
  1981.                word  79      - Real - Image spacing
  1982.                word  82      - Real - TR
  1983.                word  86      - Real - TE
  1984.                word  88      - Real - TI
  1985.                word  98      - Int  - Number of echos
  1986.                word  99      - Int  - Echo number
  1987.                word  101     - Int  - NEX (if not fractional)
  1988.                word  146     - Real - NEX
  1989.                word  146     - Int  - Flip angle
  1990.  
  1991.                       3.3.1.1.2 Tape format
  1992.  
  1993.                       3.3.1.1.3 Raw data
  1994.  
  1995.               3.3.1.2 Signa 5X - Genesis
  1996.  
  1997.                       General Electric now uses the same Sun based architecture
  1998. for its Advantage CT and Signa 5X MR family, referred to as Genesis. The
  1999. general details of this scheme will be discussed here, as well as the
  2000. description of the MR image header. Specifics related to the CT modality are
  2001. described elsewhere.
  2002.  
  2003.                       3.3.1.2.1 Image data
  2004.  
  2005.                                 Genesis is a system running under SunOS 3.5G
  2006. (NOT Solaris) on, believe it or not, a sun3 68000 architecture, not a sun4
  2007. sparc.
  2008.  
  2009.                                 It would appear that unlike in the previous
  2010. Data General based system, the active database is stored as one large
  2011. monolithic file in a raw partition, which doesn't make it very easy to extract
  2012. single imgaes. Fortunately, GE have saved the day by kindly providing, and
  2013. thoroughly documenting in the material that they send you when you ask for the
  2014. image file format, an Image Extract Tool that lives in "/usr/g/insite/bin" and
  2015. is called "ximg". To see what options are available just type "ximg -h" for
  2016. help. Note that ximg's default is to strip out the patient's name and ID number
  2017. which is annoying, so don't forget the "-s" flag. The default directory to put
  2018. the extracted images in is "/usr/g/insite/tmp". The input names to select
  2019. images in silent (non-menu) mode are of the following form:
  2020.  
  2021.                 EeeeeeSsssIiii
  2022.  
  2023.                 eeeee =  exam number   or "all"
  2024.                 sss   =  series number or "all"
  2025.                 iii   =  image number  or "all"
  2026.  
  2027. and the resultant filenames are the same with an extension of ".MR" or ".CT"
  2028. depending. For example:
  2029.  
  2030.                 % /usr/g/insite/bin/ximg -i e673s1i1 -st
  2031.                 % ls -l /usr/g/insite/tmp
  2032.                 E673S1I1.MR
  2033.  
  2034. which extracts the selected image in silent mode (-i) without stripping the
  2035. identification (-s) in rectangular (-t) mode, ie. not compressed or packed.
  2036.  
  2037.                                 One nifty feature that allows you to keep up to
  2038. date with the latest version header contents is the "-g" switch which invokes
  2039. the GenIncl utility that produces a file called "imageFileOffsets.h" that lists
  2040. the type and offsets of each field in the header ! Remarkable, huh ?
  2041.  
  2042.                                 How does one get access to the operating system
  2043. on the Signa ? Let me count the ways. First, from the Advantage console one can
  2044. just call up a command shell from the Utilities menu, or one can invoke the Ftp
  2045. option uner Networks and then use the "!" command to ftp, which like in many
  2046. Unix tools, spawns a shell. Or from another workstation on the network one can
  2047. just telnet or rsh across. If you are connected using an Advantage Windows
  2048. workstation you can pull up a command shell by using the right menu button with
  2049. the cursor on the desktop. Doing a few "cat /etc/hosts" around the place will
  2050. let you know what all the machines are called.
  2051.  
  2052. One can also access the console directly from the plasma screen by toggling
  2053. "L1-B" on or off.
  2054.  
  2055.                                 Once you have extracted them, the Genesis file
  2056. contains headers consisting of several components in common with CT and then a
  2057. specific CT or MR header. The file is structured as a "block type" header with
  2058. a brief "control header" of fixed size, followed by a bunch of optional
  2059. headers, some of which reflect internal database structures and are of no
  2060. interest, others (such as the suite/exam/series/image) headers that contain
  2061. descriptive and identification information, and two that are of importance for
  2062. deciphering the pixel data (unpack control & compression control). Some of the
  2063. more important fields are described here:
  2064.  
  2065.         Sun3 Data Types:
  2066.  
  2067.            - short is 16 bits
  2068.            - int is 32 bits
  2069.            - float is 32 bits IEEE
  2070.            - double is 64 bits IEEE
  2071.            - byte offsets from 0 start of file
  2072.            - length ==0 means header absent/empty
  2073.  
  2074.         control header (offset 0):
  2075.  
  2076.                 0   - int      - magic number = 0x494d4746 = "IMGF"
  2077.                 4   - int      - byte displacement to pixel data
  2078.                 8   - int      - width
  2079.                 12  - int      - height
  2080.                 16  - int      - depth (bits)
  2081.                 20  - int      - compression (0=asis,1=rectangular,2=packed,
  2082.                                  3=compressed,4=compressed&packed)
  2083.                 32  - int      - background shade to use for non-image
  2084.                 54  - u_short  - 16 bit end_around_carry sum of pixels
  2085.                 56  - int      - ptr to unique image identifier
  2086.                 60  - int      - length of unique image identifier
  2087.                 64  - int      - ptr to unpack header
  2088.                 68  - int      - length of unpack header
  2089.                 72  - int      - ptr to compression header
  2090.                 76  - int      - length of compression header
  2091.                 80  - int      - ptr to histogram header
  2092.                 84  - int      - length of histogram header
  2093.                 88  - int      - ptr to text plane
  2094.                 92  - int      - length of text plane
  2095.                 96  - int      - ptr to graphics plane
  2096.                 100 - int      - length of graphics plane
  2097.                 104 - int      - ptr to data base header
  2098.                 108 - int      - length of data base header
  2099.                 112 - int      - value to add to stored pixels
  2100.                 116 - int      - ptr to user defined data
  2101.                 120 - int      - length of user defined data
  2102.                 124 - int      - ptr to suite header
  2103.                 128 - int      - length of suite header
  2104.                 132 - int      - ptr to exam header
  2105.                 136 - int      - length of exam header
  2106.                 140 - int      - ptr to series header
  2107.                 144 - int      - length of series header
  2108.                 148 - int      - ptr to image header
  2109.                 152 - int      - length of image header
  2110.  
  2111.         unpack header:
  2112.  
  2113.                 // used when compression is packed, or compressed & packed
  2114.                 // contains perimeter encoding map ... cf. GE 9800
  2115.  
  2116.                 struct {
  2117.                         short pixels_to_left_of_line;
  2118.                         short pixels_in_stored_line;
  2119.                 } table [height_of_image];
  2120.  
  2121.         compression header:
  2122.  
  2123.                 Not necessary for decompressing entire image ... rather it
  2124.                 contains seeds for various "strips" of the image to allow
  2125.                 jumping into the compressed pixel data ... see the GE docs.
  2126.  
  2127.         histogram header:
  2128.  
  2129.                 Contains statistical information for determining optimum
  2130.                 windowing ... see the GE docs and GenIncl produced header
  2131.  
  2132.         exam header:
  2133.  
  2134.                 0   - char[4]  - suite ID
  2135.                 8   - u_short  - exam number
  2136.                 84  - char[13] - patient ID
  2137.                 97  - char[25] - patient name
  2138.                 122 - short    - patient age
  2139.                 126 - short    - patient sex
  2140.                 305 - char[3]  - exam type - "MR" or "CT"
  2141.  
  2142.         series header:
  2143.  
  2144.                 10  - short    - series number
  2145.                 84  - char[3]  - anatomical reference
  2146.                 92  - char[25] - scan protocol name
  2147.  
  2148.         image header - for MR (1022 bytes long):
  2149.  
  2150.                 12  - short    - image number
  2151.                 26  - float    - slice thickness mm
  2152.                 30  - short    - matrix size - X
  2153.                 32  - short    - matrix size - Y
  2154.                 34  - float    - display field of view - X (mm)
  2155.                 38  - float    - display field of view - Y (mm)
  2156.                 42  - float    - image dimension - X
  2157.                 46  - float    - image dimension - Y
  2158.                 50  - float    - pixel size - X
  2159.                 54  - float    - pixel size - Y
  2160.                 72  - char[17] - iv contrast agent
  2161.                 89  - char[17] - oral contrast agent
  2162.                 194 - int      - repetition time(usec)
  2163.                 198 - int      - inversion time(usec)
  2164.                 202 - int      - echo time(usec)
  2165.                 210 - short    - number of echoes
  2166.                 212 - short    - echo number
  2167.                 218 - float    - NEX
  2168.                 308 - char[33] - pulse sequence name
  2169.                 362 - char[17] - coil name
  2170.                 640 - short    - ETL for FSE
  2171.  
  2172.                                 So much for the headers. Now how does one deal
  2173. with the image data ? The easiest way of course is to save it as "rectangular",
  2174. that is not compressed and not packed. If you want to do it the hard way, then
  2175. if the data is packed, then unpack it, then if it is compressed, uncompress it.
  2176. The packing is a perimeter encoding method like the CT 9800, except that
  2177. instead of using a map containing just the width of the stored data, both a
  2178. left offset and a width are stored for each row, as described in the "unpack
  2179. header". The compression scheme is DPCM again but with a difference ... three
  2180. alternative encodings are possible ... a 7 bit difference (one byte), a 14 bit
  2181. difference (two bytes), or a flag byte followed by a true 16 bit pixel value
  2182. (three bytes). Presumably this scheme was devised to handle a greater dynamic
  2183. range than in the CT 9800 scheme when necessary, but produce a similar degree
  2184. of compression otherwise.
  2185.  
  2186.              0  +/- <------ 6 bits ------->
  2187.             _______________ _______________
  2188.            |   |   |   |   |   |   |   |   |
  2189.            |_______________|_______________|
  2190.              7           4   3           0
  2191.  
  2192.     or
  2193.  
  2194.              1   0  +/- <------------------ 13 bits ---------------------->
  2195.             _______________ _______________ _______________ _______________
  2196.            |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
  2197.            |_______________|_______________|_______________|_______________|
  2198.             15           12 11           8   7           4   3           0
  2199.  
  2200.     or
  2201.  
  2202.              1   1  <----- discarded ----->  Then two bytes for 16 bit word
  2203.             _______________ _______________
  2204.            |   |   |   |   |   |   |   |   |
  2205.            |_______________|_______________|
  2206.              7           4   3           0
  2207.  
  2208.                                   The following piece of C++ code pulled out of
  2209. a Genesis to DICOM translator will give you the general idea. Note that the
  2210. perimeter encoding map has already been read in (map_left and map_wide). Note
  2211. in particular the need to deal with sign extension of the difference values.
  2212. Unlike the CT 9800 example earlier, one has to use a separate loop for the
  2213. compressed data stream as all 16 bits are potentially in use.
  2214.  
  2215. static void
  2216. copygenesisimage(ifstream& instream,DC3ofstream& outstream,
  2217.     Uint16 width,Uint16 height,Uint16 depth,Uint16 compress,
  2218.     Uint16 *map_left,Uint16 *map_wide)
  2219. {
  2220.     unsigned row;
  2221.     Int16 last_pixel=0;
  2222.     for (row=0; row<height; ++row) {
  2223.         unsigned j;
  2224.         unsigned start;
  2225.         unsigned end;
  2226.  
  2227.         if (compress == 2 || compress == 4) { // packed/compacked
  2228.             start=map_left[row];
  2229.             end=start+map_wide[row];
  2230.         }
  2231.         else {
  2232.             start=0;
  2233.             end=width;
  2234.         }
  2235.         // Pad the first "empty" part of the line ...
  2236.         for (j=0; j<start; j++) outstream.write16(0);
  2237.  
  2238.         if (compress == 3 || compress == 4) { // compressed/compacked
  2239.             while (start<end) {
  2240.                 unsigned char byte;
  2241.                 instream.read(&byte,1);
  2242.                 if (!instream) return;
  2243.                 if (byte & 0x80) {
  2244.                     unsigned char byte2;
  2245.                     instream.read(&byte2,1);
  2246.                     if (!instream) return;
  2247.                     if (byte & 0x40) {    // next word
  2248.                         instream.read(&byte,1);
  2249.                         if (!instream) return;
  2250.                         last_pixel=
  2251.                             (((Uint16)byte2<<8)+byte);
  2252.                     }
  2253.                     else {            // 14 bit delta
  2254.                         if (byte & 0x20) byte|=0xe0;
  2255.                         else byte&=0x1f;
  2256.                         last_pixel+=
  2257.                             (((Int16)byte<<8)+byte2);
  2258.                     }
  2259.                 }
  2260.                 else {                // 7 bit delta
  2261.                     if (byte & 0x40) byte|=0xc0;
  2262.                     last_pixel+=(signed char)byte;
  2263.                 }
  2264.                 outstream.write16((Uint16)last_pixel);
  2265.                 ++start;
  2266.             }
  2267.         }
  2268.         else {
  2269.             while (start<end) {
  2270.                 Uint16 u=readUint16(instream);
  2271.                 if (!instream) return;
  2272.                 outstream.write16(u);
  2273.                 ++start;
  2274.             }
  2275.         }
  2276.  
  2277.         // Pad the last "empty" part of the line ...
  2278.         for (j=end; j<width; j++) outstream.write16(0);
  2279.     }
  2280. }
  2281.  
  2282.                       3.3.1.2.2 Archive format
  2283.  
  2284.                                 GE supply both DAT tape and 5.25" write once
  2285. and rewriteable optical disk drives.
  2286.  
  2287.                                 The optical drives are made by Pioneer (bad
  2288. choice GE ... media format is incompatible with any other vendor so you need a
  2289. Pioneer DEC 702 drive to read it) and furthermore GE have never documented the
  2290. media format. The WORM is described as a short term solution that was intended
  2291. to be replaced by the rewritable system (tell that to existing WORM only
  2292. owners) and hence no documentation was produced. Why the rewriteable optical
  2293. formats are not documented is not clear to me but they aren't available, at
  2294. least not according to those I have asked.
  2295.  
  2296.                                 Studying a Genesis system in operation it would
  2297. seem that neither type of optical disk is mounted as a regular file system (not
  2298. surprising for a WORM), and presumably the archive processes write directly to
  2299. the raw drives. I jave not encountered anyone yet who has successfully read and
  2300. deciphered this format but watch this space as I know one person who is trying.
  2301.  
  2302.                                 As far as the DAT format is concerned, this
  2303. format is available though I don't have it (yet). Examining a tape reveals the
  2304. following however:
  2305.  
  2306.         - One file used as a tape label (single 8192 byte record)
  2307.         - Tape mark
  2308.         - Series of image files separated by tape marks
  2309.  
  2310.                                 There does not seem to be a tape directory per
  2311. se.
  2312.  
  2313.                                 Each image file is a modification of the format
  2314. created by the ximg utility to extract images from the database.
  2315.  
  2316.                                 The ximg format is described as a file header
  2317. beginning with the magic number "IMGF" and then a short header that contains
  2318. byte offsets to the image data, and various suite, exam, series and image
  2319. headers.
  2320.  
  2321.                                 The DAT images are NOT organized like this, but
  2322. do use exactly the same headers and image data layout (and compression
  2323. schemes). The difference is in the order of the header.
  2324.  
  2325.                                 The first record of the file is 3180 bytes long
  2326. and contains:
  2327.  
  2328.         0-113      suite  header   (length 114)
  2329.         114-1137   exam   header   (length 1024)
  2330.         1138-2157  series header   (length 1020)
  2331.         2158-3079  image  header   (length 1022 for mr)
  2332.                                    (length 1020 for ct)
  2333.         3080-3179  zero padding
  2334.  
  2335.                                 NB. this record DOES NOT begin with "IMGF" !
  2336.  
  2337.                                 The second record of the file is 5208 bytes
  2338. long (in my case anyway) and followed by 8192 byte records and a final record
  2339. of whatever is left over.
  2340.  
  2341.                                 This 5208 byte record contains a "proper"
  2342. header in the ximg output format and starts with "IMGF". The subsequent byte
  2343. offsets to the image data, compression headers, histogram header etc. are
  2344. correct and offset from the beginning of this second record and NOT the start
  2345. of the file. Furthermore the pointers to those headers in the first record
  2346. (suite, exam, series and image headers) are TOTALLY WRONG and must be ignored
  2347. ... I don't know how their values are derived but it is not obvious.
  2348.  
  2349.                                 I presume that the files were reorganized this
  2350. way in order to make it easy for simple utilities to access the demographic
  2351. data to index the tape or something. Anyway it is easy to rewrite utilities
  2352. that read the ximg format to take all this into account and extract the tags
  2353. and the
  2354. images.
  2355.  
  2356.                                 The image data byte offset (eg. 5204) in the
  2357. file header is 4 bytes too short, eg. 3180 + 5204 + 4 -> 3188 which is where
  2358. the image data starts.
  2359.  
  2360.                                 If you are not familiar with the Genesis ximg
  2361. format, on a Signa at least, you can run "/usr/g/insite/bin/ximg -g" to extract
  2362. a prototype C header file describing the file format.
  2363.  
  2364.                       3.3.1.2.3 Raw data
  2365.  
  2366.               3.3.1.3 Vectra
  2367.  
  2368.                       Same comments as pertain to the Sytec/Pace entry in the
  2369. CT section. A few sample files on a floppy would be much appreciated.
  2370.  
  2371.         3.3.2 Siemens
  2372.  
  2373.               3.3.2.1 GBS II
  2374.  
  2375.                       - it is NOT in SPI format
  2376.                       - seems to be fixed format
  2377.                       - files 133120 bytes
  2378.                       - image pixel data 256*256*2 little endian
  2379.                       - image pixel offset 4096 bytes
  2380.  
  2381.               3.3.2.2 SP
  2382.  
  2383.                       - it IS in SPI format (Release 1)
  2384.                       - ACR/NEMA data stream starts immediately
  2385.                       - big-endian byte order
  2386.                       - lots of private groups containing SPI & MR specific
  2387.                         tags, but much useful information in standard tags
  2388.                       - 12 bit allocated data in 16 bits stored, high bit 11
  2389.                       - after ACR/NEMA data, trailing garbage
  2390.  
  2391.                       Similar story as for the Somatom Plus. Siemens version of
  2392. SPI, containing the following private data elements. Note that there is
  2393. overlayed data in the high four bytes of the image pixel data, and that there
  2394. seems to be a bunch of padding in the middle. The intent seems to be to store
  2395. the "original header" and the image pixel data at accessible, presumably
  2396. standard locations, presumably indexed by the byte offsets and lengths
  2397. described in group 9. This is a shame because it seems that none of the really
  2398. interesting MR attributes have been included in the SPI form, although SPI
  2399. private tags are available for lots of MR parameters. This is in contrast to
  2400. the Impact which contains more interesting SPI tags.
  2401.  
  2402. SPI private tags:
  2403.  
  2404. (0009,0010)                                      <SPI RELEASE 1>
  2405. (0009,0011)                                        <SIEMENS MED>
  2406. (0009,1010) SPI RELEASE 1   Comments        <SPI VERSION  01.00>
  2407. (0009,1015) SPI RELEASE 1   UID     <000S00MR001994122719161248>
  2408. (0009,1110) SIEMENS MED     RecognitionCode             <MR 2.0>
  2409. (0009,1130) SIEMENS MED     ByteOffsetOfOriginalHeader   [0x800]
  2410. (0009,1131) SIEMENS MED     LengthOfOriginalHeader      [0x1600]
  2411. (0009,1140) SIEMENS MED     ByteOffsetOfPixelmatrix     [0x2000]
  2412. (0009,1141) SIEMENS MED     LengthOfPixelmatrixInBytes [0x20000]
  2413.  
  2414. (0011,0010)                                      <SPI RELEASE 1>
  2415.  
  2416. (0021,0010)                                        <SIEMENS MED>
  2417. (0021,1010) SIEMENS MED     Zoom                          <01.0>
  2418. (0021,1011) SIEMENS MED     Target                            <>
  2419. (0021,1020) SIEMENS MED     ROIMask                     [0x0000]
  2420.  
  2421. Overlay descriptions (overlays already in image pixel data):
  2422.  
  2423. (6000,0010)                 OverlayRows                 [0x0100]
  2424. (6000,0011)                 OverlayColumns              [0x0100]
  2425. (6000,0040)                 ROI                              <R>
  2426. (6000,0050)                 OverlayOrigin        [0x5c31,0x2031]
  2427. (6000,0060)                 OverlayCompressionCode        <NONE>
  2428. (6000,0100)                 OverlayBitsAllocated        [0x0010]
  2429. (6000,0102)                 OverlayBitPosition          [0x000c]
  2430. (6000,0110)                 OverlayFormat                 <RECT>
  2431. (6000,0200)                 OverlayLocation             [0x7fe0]
  2432.  
  2433. (6002,0010)                 OverlayRows                 [0x0100]
  2434. (6002,0011)                 OverlayColumns              [0x0100]
  2435. (6002,0040)                 ROI                              <R>
  2436. (6002,0050)                 OverlayOrigin        [0x5c31,0x2031]
  2437. (6002,0060)                 OverlayCompressionCode        <NONE>
  2438. (6002,0100)                 OverlayBitsAllocated        [0x0010]
  2439. (6002,0102)                 OverlayBitPosition          [0x000d]
  2440. (6002,0110)                 OverlayFormat                 <RECT>
  2441. (6002,0200)                 OverlayLocation             [0x7fe0]
  2442.  
  2443. (6004,0010)                 OverlayRows                 [0x0100]
  2444. (6004,0011)                 OverlayColumns              [0x0100]
  2445. (6004,0040)                 ROI                              <R>
  2446. (6004,0050)                 OverlayOrigin        [0x5c31,0x2031]
  2447. (6004,0060)                 OverlayCompressionCode        <NONE>
  2448. (6004,0100)                 OverlayBitsAllocated        [0x0010]
  2449. (6004,0102)                 OverlayBitPosition          [0x000e]
  2450. (6004,0110)                 OverlayFormat                 <RECT>
  2451. (6004,0200)                 OverlayLocation             [0x7fe0]
  2452.  
  2453. (6006,0010)                 OverlayRows                 [0x0100]
  2454. (6006,0011)                 OverlayColumns              [0x0100]
  2455. (6006,0040)                 ROI                              <R>
  2456. (6006,0050)                 OverlayOrigin        [0x5c31,0x2031]
  2457. (6006,0060)                 OverlayCompressionCode        <NONE>
  2458. (6006,0100)                 OverlayBitsAllocated        [0x0010]
  2459. (6006,0102)                 OverlayBitPosition          [0x000f]
  2460. (6006,0110)                 OverlayFormat                 <RECT>
  2461. (6006,0200)                 OverlayLocation             [0x7fe0]
  2462.  
  2463. More SPI private stuff ... padding and original header ...
  2464.  
  2465. (7001,0010)                                        <SIEMENS MED>
  2466. (7001,1010) SIEMENS MED     Dummy
  2467.  
  2468. (7003,0010)                                        <SIEMENS MED>
  2469. (7003,1010) SIEMENS MED     Header
  2470.  
  2471. (7005,0010)                                        <SIEMENS MED>
  2472. (7005,1010) SIEMENS MED     Dummy
  2473.  
  2474. NB. Siemens VR for OverlayOrigin seems to be wrong. ACR/NEMA says it should be
  2475. binary, but [0x5c31,0x2031] translates to a string <1\1> which seems more
  2476. plausible!
  2477.  
  2478.                       The models in this family include the SP (which the SPI
  2479. describes as a GBS 3 !), the SP/4000 which got a faster Vax, and the new
  2480. Vision. I have only examined the files from the SP so far, but they are bog
  2481. standard SPI with no surprises, and I have no reason to doubt the same is true
  2482. of the later models.
  2483.  
  2484.                       The usual Vax VMS problems apply. Use the console serial
  2485. port on the back of the Vax. There is a C compiler supplied so you can compile
  2486. the more recent C version of kermit ... although the old Bliss version works
  2487. fine. Unlike the Philips, there is no problem with CR delimited file attributes
  2488. being set on the binary files. Kermit transfers are glacially slow as always.
  2489.  
  2490.               3.3.2.3 Impact
  2491.  
  2492.                       - it IS in SPI format (Release 1, based on ACR/NEMA 2.0)
  2493.                       - skip the 1st 128 bytes to get to ACR/NEMA data stream
  2494.                            (may be artifact of transfer process)
  2495.                       - big-endian byte order
  2496.                       - lots of private groups containing SPI & MR specific
  2497.                         tags, but much useful information in standard tags
  2498.                       - 12 bit allocated data in 16 bits stored, high bit 11
  2499.                       - after ACR/NEMA data, file is padded to 512 byte mark
  2500.  
  2501.                       Siemens version of SPI, containing the following private
  2502. data elements. More comprehensive attributes than the Somatom Plus or SP. There
  2503. is no overlayed data in the high four bytes of the image pixel data, and that
  2504. there is no padding in the middle or "original header", or byte offsets and
  2505. lengths described in group 9. Only some of the more significant elements are
  2506. described here in the interest of brevity. Sources for a more comprehensive
  2507. dictionary are described under SPI.
  2508.  
  2509. SPI private tags:
  2510.  
  2511. (0009,0010)                 PrivateCreator                <SPI RELEASE 1>
  2512. (0009,0012)                 PrivateCreator          <SIEMENS CM VA0  CMS>
  2513. (0009,0013)                 PrivateCreator          <SIEMENS CM VA0  LAB>
  2514. (0009,1010) SPI RELEASE 1   Comments                 <SPI VERSION  01.00>
  2515. (0009,1015) SPI RELEASE 1   UID              <000S00MR001994021614211710>
  2516. (0009,1040) SPI RELEASE 1   DataObjectSubtype                    [0x0000]
  2517. (0009,1041) SPI RELEASE 1   DataObjectSubtype                  <MRUPNONE>
  2518. (0009,1210) SIEMENS CM VA0  CMS  StorageMode                   <EXPANDED>
  2519. (0009,1212) SIEMENS CM VA0  CMS  EvaluationMask                  [0x0000]
  2520. (0009,1226) SIEMENS CM VA0  CMS  LastMoveDate                <1994.02.16>
  2521. (0009,1227) SIEMENS CM VA0  CMS  LastMoveTime              <13:41:52.000>
  2522. (0009,1320) SIEMENS CM VA0  LAB  HeaderVersion                      <VB6>
  2523.  
  2524. (0011,0011)                 PrivateCreator          <SIEMENS CM VA0  CMS>
  2525. (0011,1110) SIEMENS CM VA0  CMS RegistrationDate             <1994.02.16>
  2526. (0011,1111) SIEMENS CM VA0  CMS RegistrationTime          <113:43:49.000>
  2527. (0011,1123) SIEMENS CM VA0  CMS UsedPatientWeight                <000050>
  2528.  
  2529. (0019,0010)                 PrivateCreator          <SIEMENS CM VA0  CMS>
  2530. (0019,0012)                 PrivateCreator          <SIEMENS MR VA0  GEN>
  2531. (0019,0014)                 PrivateCreator         <SIEMENS MR VA0  COAD>
  2532. (0019,0015)                 PrivateCreator         <SIEMENS CM VA0  ACQU>
  2533. (0019,1060) SIEMENS CM VA0  CMS NumberOfDataBytes                <310127>
  2534. (0019,1220) SIEMENS MR VA0  GEN NominalNumberOfFourierLines      <000128>
  2535. (0019,1226) SIEMENS MR VA0  GEN NumberOfFourierLinesafterZero    <000063>
  2536. (0019,1228) SIEMENS MR VA0  GEN FirstMeasuredFourierLine         <-00064>
  2537. (0019,1230) SIEMENS MR VA0  GEN AcquisitionColumns               <000512>
  2538. (0019,1231) SIEMENS MR VA0  GEN ReconstructionColumns            <000512>
  2539. (0019,1250) SIEMENS MR VA0  GEN CurrentNumberOfAverages          <000010>
  2540. (0019,1260) SIEMENS MR VA0  GEN FlipAngle                <00.8000000+E00>
  2541. (0019,1290) SIEMENS MR VA0  GEN NumberOfSaturationRegions        <000000>
  2542. (0019,1294) SIEMENS MR VA0  GEN ImageRotationAngle       <00.0000000+E00>
  2543. (0019,1412) SIEMENS MR VA0  COAD MagneticFieldStrength   <009.500702E-01>
  2544. (0019,1456) SIEMENS MR VA0  COAD ReceiverFilterFrequency         <500000>
  2545.  
  2546. (0021,0010)                     PrivateCreator              <SIEMENS MED>
  2547. (0021,0011)                     PrivateCreator      <SIEMENS CM VA0  CMS>
  2548. (0021,0013)                     PrivateCreator      <SIEMENS MR VA0  GEN>
  2549. (0021,1010) SIEMENS MED Zoom                                           <>
  2550. (0021,1011) SIEMENS MED Target                                         <>
  2551. (0021,1020) SIEMENS MED ROIMask                                     [0x0]
  2552. (0021,1120) SIEMENS CM VA0  CMS FoV        <00.2050000+E200\.2050000+E20>
  2553. (0021,1122) SIEMENS CM VA0  CMS ImageMagnificationFactor <001.000000E+00>
  2554. (0021,1130) SIEMENS CM VA0  CMS ViewDirection                      <HEAD>
  2555. (0021,1132) SIEMENS CM VA0  CMS RestDirection                      <HEAD>
  2556. (0021,1160) SIEMENS CM VA0  CMS ImagePosition        <000.000000E+00\.\.>
  2557. (0021,1161) SIEMENS CM VA0  CMS ImageNormal          <-00.000000E+00\.\.>
  2558. (0021,1163) SIEMENS CM VA0  CMS ImageDistance            <002.787480E+01>
  2559. (0021,116a) SIEMENS CM VA0  CMS ImageRow             <001.000000E+00\.\.>
  2560. (0021,116b) SIEMENS CM VA0  CMS ImageColumn          <000.000000E+00\.\.>
  2561. (0021,1170) SIEMENS CM VA0  CMS PatientOrientationSet1          <R\AH\HP>
  2562. (0021,1171) SIEMENS CM VA0  CMS PatientOrientationSet2          <L\PF\FA>
  2563. (0021,1180) SIEMENS CM VA0  CMS StudyName    <routine_brain/6_opt3_mprag>
  2564. (0021,1182) SIEMENS CM VA0  CMS StudyType                           <MEA>
  2565. (0021,1334) SIEMENS MR VA0  GEN NumberOf3DImagePartitions        <000128>
  2566. (0021,1339) SIEMENS MR VA0  GEN SlabThickness            <001.800000E+02>
  2567. (0021,1342) SIEMENS MR VA0  GEN CurrentSliceNumber               <000001>
  2568. (0021,1343) SIEMENS MR VA0  GEN CurrentGroupNumber               <000001>
  2569. (0021,134f) SIEMENS MR VA0  GEN OrderofSlices                 <ASCENDING>
  2570. (0021,1370) SIEMENS MR VA0  GEN NumberOfEchoes                   <000001>
  2571.  
  2572. (0029,0011)                     PrivateCreator      <SIEMENS CM VA0  CMS>
  2573. (0029,1120) SIEMENS CM VA0  CMS PixelQualityCode         <NONE\NONE\NONE>
  2574.  
  2575. (0051,0010)                     PrivateCreator      <SIEMENS CM VA0  CMS>
  2576. (0051,1010) SIEMENS CM VA0  CMS ImageText                           <...>
  2577.  
  2578.               3.3.2.4 Vision
  2579.  
  2580.                       Unknown. Bound to be SPI but don't know what attributes
  2581. are present.
  2582.  
  2583.         3.3.3 Philips
  2584.  
  2585.               3.3.3.1 S5
  2586.  
  2587.                       - can export as ACR/NEMA (actually SPI) files
  2588.                       - little endian byte order
  2589.                       - 12 bit packed data
  2590.  
  2591.                       This description pertains to "exported ACR/NEMA", not the
  2592. native image files, which I am not familiar with. In fact I am not even sure in
  2593. which directory they live.
  2594.  
  2595.                       Use the ADMIN menu on the operator's console to find the
  2596. import/export ACR/NEMA utility, with which you can select an exam, series or
  2597. image to export as an ACR/NEMA file. The default directory is the GYROVIEW home
  2598. directory, which is already pretty cluttered so it is better to make another
  2599. subdirectory like "ANI" to keep exported files in. The exported files have huge
  2600. names composed of identification information, but all have a ".ANI" extension.
  2601. For example:
  2602.  
  2603.         DIR SYS$SYSROOT:[GYROSCAN]*.ANI;*
  2604.  
  2605.         SMITH__FA02010801010001.ANI;1
  2606.  
  2607.                       These files are stored as, wait for it, fixed length 512
  2608. byte records, with the "carriage return carriage control" record attributes set
  2609. from some bizarre reason, which totally messes up kermit which starts messing
  2610. with adding and changing CR/LF characters. See the Vax diatribe below for a
  2611. method of getting around this, by using DUMP as a poor man's uuencode
  2612. permitting ascii transfer. Unfortunately the nature of fixed length records
  2613. under VMS means that the last record will be padded out to 512 bytes without
  2614. any indication of the "real" end-of-file. This means your ACR/NEMA reader has
  2615. to cope with trailing garbage gracefully.
  2616.  
  2617.                       Unlike the Siemens SPI files, the Philips ones are stored
  2618. in little-endian format. There is no fixed size header to skip, just go
  2619. straight into the ACR/NEMA data stream. For the image pixel data four 12 bit
  2620. words are packed without padding into 16 bit words, without any compression
  2621. sheme. See the ACR/NEMA section for description of the packing organization.
  2622. Lots of private tags are defined, but these can be ignored. Some of the
  2623. identifying tags present are as follows:
  2624.  
  2625. (0000x8,000x10) CS RecognitionCode       VR=<CS>   VL=<0xc>  <ACR-NEMA 1.0>
  2626. (0000x8,000x70) LO Manufacturer          VR=<LO>   VL=<0x8>  <Philips >
  2627. (0000x8,0x1090) LO ManufacturerModelName VR=<LO>   VL=<0x2>  <S5>
  2628. (0000x9,000x10) LT SPIComments   VR=<LT>   VL=<0xe>   <SPI Release 1 >
  2629. (000x19,000x10)                  VR=<LT>   VL=<0x14>  <PHILIPS MR R5.6/PART>
  2630.  
  2631.                       To get the files off, I plug a portable with a serial
  2632. cable into one of the spare serial ports inside one of the Vax cabinets, at
  2633. 9600 baud, and login as "GYROVIEW/NOCOM" without any password needed. This
  2634. dumps you in the same directory as the files will be stored by default. You
  2635. will probably need to set local echo on on your portable, or "SET
  2636. TERMINAL/ECHO" on the Vax.
  2637. Kermit was already loaded on my system, accessed as "RUN [SYSEXE]KERMIT". See
  2638. the Vax section later for more help.
  2639.  
  2640.               3.3.3.2 ACS
  2641.               3.3.3.3 T5
  2642.               3.3.3.4 NT5 & NT15
  2643.  
  2644.         3.3.4 Picker - another black hole
  2645.         3.3.5 Toshiba - another black hole
  2646.         3.3.6 Hitachi - another black hole
  2647.         3.3.7 Shimadzu - another black hole
  2648.         3.3.8 Elscint - another black hole
  2649.  
  2650. -- 
  2651. David A. Clunie (dclunie@flash.us.com)
  2652. In sunny Riyadh, Saudi Arabia.
  2653. Archive-name: medical-image-faq/part2
  2654. Posting-Frequency: monthly
  2655. Last-modified: Sat Feb 18 16:42:58 GMT+0300 1995
  2656. Version: 2.01
  2657.  
  2658.  
  2659.     3.4 Proprietary Workstations
  2660.  
  2661.         3.4.1 ISG
  2662.  
  2663.               3.4.1.1 Gyroview
  2664.  
  2665.                       The Philips Gyroview workstation is a high-resolution
  2666. graphical workstation for MR images from Gyroscan scanners, that can also
  2667. handle CT images and other modalities, and has an optional package for three
  2668. dimensional processing of images. It is based on a Sun SPARC system with
  2669. proprietary graphics hardware. The software is actually written by ISG in
  2670. Canada. The image format is an ACR/NEMA based format with various private tags
  2671. defined, and a proprietary scheme of image compression that has me stumped. I
  2672. am told by some that there is no means of telling the Gyroview not to compress
  2673. the images. I use compress in the sense that includes packing four 12 bit words
  2674. into three 16 bit big-endian words, which appears to be part of the scheme in
  2675. use. Unfortunately, some form of perimeter encoding is also in use, and I just
  2676. can't figure it out :( Some people have had more luck using "the export utility
  2677. of the Gyroview" to produce just 12 bit packed images without the perimeter
  2678. encoding. I don't know whether this is a standard feature of the workstation or
  2679. not. Others have suggested looking in the "/isg/3dmr/DataRoot/tscript/"
  2680. directory for hints.
  2681.  
  2682.                       Despite prolonged exchanges of email, and encouragement
  2683. from other individuals at ISG, it seems that the formal decision by the manager
  2684. of the customer service department, Irene Gearin, is not to release the format.
  2685. Customers may contact her at ireneg@isgtec.com for information on how to obtain
  2686. a software package called the External Developers Tool which contains a tool
  2687. called xdimage which can only be used on ISG's proprietary hardware. Whether
  2688. this is free to customers or costs extra I am not sure, but I believe a
  2689. non-disclosure agreement is required.
  2690.  
  2691.                       I would still prefer to know the format, as people keep
  2692. asking (these machines were pretty popular I gather), and if anyone has any
  2693. hints about the data format, I would appreciate them. Here follows part of a
  2694. reply to one of these people when I made an unsuccesful attempt to figure this
  2695. out:
  2696.  
  2697. Firstly, I presume this file is generated by a Philips Gyroview workstation
  2698. judging by ...
  2699.  
  2700. (0008,0070) LO Manufacturer  VR=<LO>  VL=<8>  <GYROVIEW>
  2701.  
  2702. The file says it is an MRI image ...
  2703.  
  2704. (0008,0060) CS Modality  VR=<CS>  VL=<2>  <MR>
  2705.  
  2706. and yet it is missing many of the mri attributes normally present. Also it
  2707. includes some CT specific attributes, notably ...
  2708.  
  2709. (0018,1120) DS GantryDetectorTilt  VR=<DS>  VL=<2>  < 0>
  2710.  
  2711. which is pretty weird. I presume that this format is generated by something
  2712. purely for the purposes of 3D reconstruction and only the attributes needed for
  2713. that have been preserved.
  2714.  
  2715. The image appears to be 512*512 ...
  2716.  
  2717. (0028,0010) US Rows     VR=<US>  VL=<2>  [200]
  2718. (0028,0011) US Columns  VR=<US>  VL=<2>  [200]
  2719.  
  2720. As far as the compression format is concerned ...
  2721.  
  2722. (0028,0060) CS CompressionCode  VR=<CS>  VL=<2>  < 2>
  2723.  
  2724. is not in itself a valid ACR/NEMA value, and hence some proprietary variation
  2725. is in use. The most important clue is ...
  2726.  
  2727. (0028,0040) CS ImageFormat  VR=<CS>  VL=<4>  <CIRC>
  2728.  
  2729. which is also not valid ACR/NEMA (only RECT is permitted). From this I conclude
  2730. that some sort of 'circular' perimeter encoding scheme is in use that only
  2731. sends the meaningful central pixels in each row and leaves out the background.
  2732. This is substantiated by the fact that the image pixel data seems to be
  2733. preceded by a table of 257 long words in ascending order, each value separated
  2734. by relatively low values (80-100 or so). I suspect that these are pointers into
  2735. the data to the start of each row...
  2736.  
  2737. % od -x I011_1_001 +1404 | more
  2738. 0001404  0000 0202 0000 0252 0000 02a2 0000 02f2
  2739. 0001424  0000 0342 0000 0392 0000 03e2 0000 0432
  2740. 0001444  0000 0482 0000 04d2 0000 0522 0000 0572
  2741. 0001464  0000 05c2 0000 0612 0000 0662 0000 06b3
  2742. 0001504  0000 0705 0000 0757 0000 07ab 0000 0800
  2743. 0001524  0000 0857 0000 08ae 0000 0905 0000 095e ...
  2744.  
  2745. [0000] 000514 -> 000514
  2746. [0001] 000594 -> 000080
  2747. [0002] 000674 -> 000080
  2748. [0003] 000754 -> 000080
  2749. [0004] 000834 -> 000080
  2750. [0005] 000914 -> 000080
  2751.  
  2752.  ...
  2753.  
  2754. [0155] 015322 -> 000103
  2755. [0156] 015425 -> 000103
  2756. [0157] 015527 -> 000102
  2757. [0158] 015629 -> 000102
  2758.  
  2759.  ...
  2760.  
  2761. [0254] 024484 -> 000080
  2762. [0255] 024564 -> 000080
  2763. [0256] 024564 -> 000000
  2764.  
  2765. The first of these values seems to be a pointer in two byte word units past the
  2766. table, the entries for a series of rows, then a final "257th" value that is the
  2767. same as the preceding with a difference of zero, possibly flagging the end of
  2768. the table.
  2769.  
  2770. What confuses me is the fact that there are 256 or so entries rather than 512
  2771. (number of rows), and that the difference values are relatively small for 512
  2772. columns. Perhaps each entry applies to two successive rows though this seems
  2773. rather peculiar.
  2774.  
  2775. Furthermore, if it is true that the units are two byte words, then the last
  2776. pointer value is much lower than the number of remaining bytes in the image
  2777. pixel data attribute, so what are all the other bytes for ?
  2778.  
  2779. The other thing that is going to make extraction difficult is the fact that the
  2780. data are supposed to be 12 bits packed into 16 bit words ...
  2781.  
  2782. (0028,0100) US BitsAllocated  VR=<US>  VL=<2>  [c]
  2783. (0028,0101) US BitsStored     VR=<US>  VL=<2>  [c]
  2784. (0028,0102) US HighBit        VR=<US>  VL=<2>  [b]
  2785.  
  2786. Hence 3 two byte words are used to store 4 12 bit pixels. It may not be easy to
  2787. figure out in what order this packing is performed. The ACR/NEMA standard has
  2788. an example of its intent in this case, but the byte order was never specified
  2789. for this standard, which had a 16 bit hardware data path and was not originally
  2790. intended for offline data storage in bytes, so there are a number of possible
  2791. permutations to deal with :(
  2792.  
  2793. Finally I don't know what to make of the "private" tags ...
  2794.  
  2795. Unrecognized (0029,0010)  VR=<LT>  VL=<a> <ISG shadow>
  2796. Unrecognized (0029,1070)  VR=<LT>  VL=<6> < 49128>
  2797. Unrecognized (0029,1080)  VR=<LT>  VL=<6> <123432>
  2798. Unrecognized (0029,1090)  VR=<LT>  VL=<2> < 0>
  2799.  
  2800. which presumably have some significance or they wouldn't be there !
  2801.  
  2802.     3.5 Other
  2803.  
  2804.          Empty at present.
  2805.  
  2806. -- 
  2807. David A. Clunie (dclunie@flash.us.com)
  2808. In sunny Riyadh, Saudi Arabia.
  2809. Archive-name: medical-image-faq/part2
  2810. Posting-Frequency: monthly
  2811. Last-modified: Sat Feb 18 16:42:58 GMT+0300 1995
  2812. Version: 2.01
  2813.  
  2814.  
  2815. 4.  Host Machines
  2816.  
  2817.     4.1 Data General
  2818.  
  2819.         4.1.1 Data
  2820.  
  2821.               4.1.1.1 Integers
  2822.  
  2823.                       Integers are 16 bit two's complement and stored in
  2824. big-endian format as on Sun Sparc and opposite to the Dec VAX.
  2825.  
  2826.               4.1.1.2 Floating Point
  2827.  
  2828.                       Single precision real values are 32 bits long, in
  2829. big-endian format. The high bit is the sign bit, followed by a 7 bit excess 64
  2830. exponent (power to which 16 must be raised) then a 24 bit hexadecimally
  2831. normalized mantissa with the decimal point to the left of the most significant
  2832. bit. Double precision values just have another 32 bits tacked on the mantissa
  2833. and the same exponent format.
  2834.  
  2835.             Sign
  2836.            |<-->|<------ Exponent ------>|<--------- Mantissa -------->|
  2837.             ______________ ______________ ______________ ______________
  2838.            |              |              |              |              |
  2839.            |______________|______________|______________|______________|
  2840.             31          28 27          24 23          20 19          16
  2841.            |<----------------------- Mantissa ------------------------>|
  2842.             ______________ ______________ ______________ ______________
  2843.            |              |              |              |              |
  2844.            |______________|______________|______________|______________|
  2845.             15          12 11           8 7            4 3            0
  2846.  
  2847.                       Here is a little piece of C++ code that should run on
  2848. anything and convert Data General floats to whatever the host's floating point
  2849. format is.
  2850.  
  2851.         double    value;
  2852.         unsigned char    sign;
  2853.         Uint16        exponent;
  2854.         Uint32        mantissa;
  2855.  
  2856.         typedef struct {
  2857.             unsigned    sign : 1;
  2858.             unsigned    exponent : 7;
  2859.             unsigned    mantissa : 24;
  2860.         } DG_FLOAT;
  2861.  
  2862.         DG_FLOAT number;
  2863.  
  2864.         unsigned char buffer[4];
  2865.         instream.read(buffer,4);
  2866.         if (instream) {
  2867.             // DataGeneral is a Big Endian machine
  2868.             memcpy ((char *)(&number),buffer,4);
  2869.             sign     = number.sign;
  2870.             exponent = number.exponent;
  2871.             mantissa = number.mantissa;
  2872.  
  2873.             value = (double) mantissa / (1 << 24) *
  2874.                 pow (16.0, (long)(exponent) - 64);
  2875.             value = (sign == 0) ? value : -value;
  2876.         }
  2877.         else {
  2878.             cerr << "read failed\n" << flush;
  2879.             value=0;
  2880.         }
  2881.  
  2882.         4.1.2 Operating System
  2883.  
  2884.               4.1.2.1 RDOS
  2885.  
  2886.                       Used on the GE CT 9800 family. Severely primitive but
  2887. then is running on an old machine that can only map 64Kb of memory at a time
  2888. after all. It is apparently multitasking. Documentation may still be available
  2889. from Data General (try DG Direct) but is not supplied with the scanner by GE.
  2890. If anyone knows where I can find it at a reasonable price let me know. Here is
  2891. a brief command summary culled from a nifty pocket book from GE for
  2892. SunOS/Genesis users that compares commands:
  2893.  
  2894.                  CHATR  - file attributes
  2895.                  CRAND  - create randomly organized file
  2896.                  CDIR   - create directory
  2897.                  DELETE - files or directories
  2898.                  DIR    - change directory
  2899.                  DISK   - free space
  2900.                  FILCOM - compare files
  2901.                  GDIR   - show working directory name
  2902.                  GTOD   - show date and time
  2903.                  LINK   - files (symbolic)
  2904.                  LIST   - directory contents
  2905.                  MOVE   - a file
  2906.                  RENAME - a file
  2907.                  SDAT   - set date
  2908.                  STOD   - set time
  2909.                  SDUMP  - write files to a device
  2910.                  SLOAD  - read dumped files
  2911.                  SPEED  - tex editor
  2912.                  TYPE   - contents of file
  2913.                  XFER   - copy a file
  2914.  
  2915.                  wildcards: '-' is series, '*' is single character
  2916.  
  2917.               4.1.2.2 AOS/VS
  2918.  
  2919.                       Used on the GE Signa 3X and 4X family. Quite a nice
  2920. operating system with multi-tasking and hierarchical directories. Here is a
  2921. brief command summary again culled from a nifty pocket book from GE for
  2922. SunOS/Genesis users that compares commands:
  2923.  
  2924.                  ACL         - access control list (ownership)
  2925.                  BYE         - exit command process
  2926.                  COPY        - a file
  2927.                  CREATE      - a text file
  2928.                  CREATE/DIR  - a directory
  2929.                  CREATE/LINK - link files
  2930.                  DELETE      - files & directories
  2931.                  DIR         - display or change working directory
  2932.                  DUMP        - to peripheral
  2933.                  F/AS/S      - directory listing with file status
  2934.                  DATE        - show or set
  2935.                  HELP
  2936.                  LOAD        - DUMPed files
  2937.                  MOVE        - a file
  2938.                  RENAME      - a file
  2939.                  PATH        - show pathname of a file
  2940.                  PAUSE       - the command line interpreter
  2941.                  SUPERU ON   - enable superuser
  2942.                  SED         - text editor
  2943.                  TIME        - show or set
  2944.                  TYPE        - contents of text file
  2945.                  ?           - list processes running
  2946.  
  2947.                  wildcards: '+' is series, '*' is single character
  2948.  
  2949.                       Other useful hints include the use of "^" to refer to the
  2950. next directory up (like ".." in Unix) in DIR commands. Command options follow
  2951. the command name without any spaces and are indicated by a slash. COPY
  2952. operations specify the destination name first and then the source name. Devices
  2953. like the mag tape are indicated by "@", for example "@MTB0" is tape drive zero.
  2954. Files on the tape can be referred to as "@MTB0:nn" which is very handy. For
  2955. example to read a file off a CT 9800 tape under AOS/VS:
  2956.  
  2957.                 COPY/V/IMTRSIZE=8192 B038040101.YP @MTB0:18
  2958.  
  2959.                       Perhaps most importantly, there is an extensive online
  2960. help system ... use the HELP command.
  2961.  
  2962.         4.1.3 Network
  2963.  
  2964.               If you have a GE Signa based on a DG then you can get the
  2965. so-called "High Speed Network" card and software from GE. From memory it is
  2966. pretty pricey, and there used to be a "slower" network interface that was
  2967. cheaper, but I don't think this is available anymore.
  2968.  
  2969.               If you have a CT 9800 based on the DG S/140 and you need to get
  2970. it connected there are a number of solutions:
  2971.  
  2972.              - Talk to GE about there ID/LINK II product ... I gather this is a
  2973. device that hooks into the SCSI cable to the hard drive (you need one of the
  2974. Ace drives not the old Zebra drive), monitors disk activity and snatches pieces
  2975. of the conversation to make a copy of the image data, stores it and makes it
  2976. available via some network protocol. Sound crazy ? Perhaps, but they tell me it
  2977. works and the price is reasonable, at least for something from GE anyway. Get
  2978. them to throw one in next time you buy something big.
  2979.  
  2980.              - The do-it-yourself approach. Talk to John Clayton
  2981. (clayton@c-c.com) at Claflin and Clayton. They supply a complete R-level
  2982. solution by providing Ethernet hardware and TCP/IP software for 16 bit DG OS
  2983. including AOS and RDOS (specifically including the GE CT version of RDOS). He
  2984. tells me "you can expect a file transfer rate of 25 kbytes/s for S/140
  2985. systems". The package consists of:
  2986.  
  2987.               $2,850 - EC-10 ethernet controller
  2988.               $1,645 - RDOS TCP/IP software (telnet client,ftp client/server)
  2989.  
  2990.               I have not personally tried either of these approaches, and I am
  2991. sure there are others (talk to Merge or DeJarnette), but I am getting really
  2992. tired of carrying 9-track tapes around so perhaps I will bite the bullet soon
  2993. (and upgrade to a HighSpeed Advantage !).
  2994.  
  2995.     4.2 Vax
  2996.  
  2997.         4.2.1 Data
  2998.  
  2999.               4.2.1.1 Integers
  3000.  
  3001.                       - little endian
  3002.                       - 8, 16, or 32 bits
  3003.  
  3004.               4.2.1.2 Floating Point
  3005.  
  3006.                       - little endian
  3007.                       - D_float
  3008.  
  3009.                         - 8 bytes
  3010.                         - sign bit 15
  3011.                         - exponent bits 14-7 excess 128 binary
  3012.                         - fraction MSB firstbits 6-0, 31-16, 47-32, 63-48
  3013.                         - normalized bit is not represented (hidden)
  3014.  
  3015.                       - G_float
  3016.  
  3017.                         - 8 bytes
  3018.                         - like D, but
  3019.                         - exponent is bits 14-4 excess 1024
  3020.                         - fraction 3-0 and 63-16
  3021.  
  3022.                       - F_float
  3023.  
  3024.                         - 4 bytes
  3025.                         - like D, smaller fraction
  3026.  
  3027.                       - H_float
  3028.  
  3029.                         - 16 bytes
  3030.                         - like G, but
  3031.                         - exponent is bits 14-0 excess 16384
  3032.                         - fraction is bits 127-16
  3033.  
  3034.                           - same wierd order
  3035.                           - bit 112 least significant
  3036.  
  3037.               4.2.1.3 Strings
  3038.  
  3039.                       - 16 bits of length
  3040.                       - byte of type
  3041.                       - byte of class
  3042.                       - 32 bits of pointer
  3043.  
  3044.         4.2.2 Operating System
  3045.  
  3046.               4.2.2.1 VMS
  3047.  
  3048.                       Truely one of the world's most irritating operating
  3049. systems to use, especially if you are a unix fan. Still it works, has a great
  3050. online help system that saves one's butt almost often enough to be useful, and
  3051. if you can remember the directory where kermit is stored and the weird command
  3052. to invoke it one can get by (barely).
  3053.  
  3054.                       If you don't know VMS and the vendor doesn't supply the
  3055. manuals, get them from DEC ... you need them bad ... real bad. If (like me) you
  3056. throw them out everytime you move then encounter another piece of archaic
  3057. equipment, you need the "vaxbook" which is available via ftp from
  3058. decoy.uoregon.edu, written by Joseph E St Sauver, which summarizes commands,
  3059. files and all sorts of application specific stuff, though it is no substitute
  3060. for the real thing.
  3061.  
  3062.                       Recent VMS update: goddamn file formats ! Why can't VMS
  3063. behave like a real operating system and forget this file format crap ! I have
  3064. some Philips S5 MR images exported in ACR/NEMA format and I can't get the
  3065. things off the hosts's Vax using Kermit, because though they have fixed length
  3066. 512 byte records, some cretinous program sets the "carriage return carriage
  3067. control" record attributes, which causes kermit to send with all the '0A'
  3068. characters scrubbed out amongst other atrocities. I am getting desperate and
  3069. about to try using the Hex/Dehex utility that came with Kermit to get the stuff
  3070. off and then decode the hex format ! Or perhaps even use "dump" to make a
  3071. textfile, transfer, and decipher that. (No I don't have a C compiler for the
  3072. Vax so I guess I can't use uuencode unless someone wants to mail me a hex'ed
  3073. executable). Any hints, or instructions as to how to use FDL and Convert, to
  3074. change it to a normal format would be appreciated. (Why can't they just have a
  3075. "set file record attribute xxx" command like all the other millions of set
  3076. commands ? Grrrr.).
  3077.  
  3078.                       More recent VMS update: finally had an inspiration while
  3079. staring at hex dumps of these files - why not use the VMS "DUMP" utility which
  3080. produces hex dumps as a "poor man's uuencode" by saving the dump to a file,
  3081. transferring it as an ascii file, and then decoding it at the destination ? Of
  3082. course there are no nifty line checksums or anything, but a transfer protocol
  3083. such as kermit takes care of this. The DUMP output defaults to 8 32 bit long
  3084. words separated by a space per line displayed as hex, then an ascii string (32
  3085. bytes) and then a 24 bit word hex address offset from the start of the fixed
  3086. length record. All the data containing lines start with a single space, where
  3087. as descriptions at the start of each record begin in the first column, hence
  3088. the data lines can be easily selected out. By the way, the hex version of the
  3089. data is listed in reverse order ! VMS is so bizarre ! For example, here is a
  3090. fixed length 512 byte record file from a Philips S5 MRI (some of the hex words
  3091. elided to make the line fit on the page):
  3092.  
  3093. Dump of file SYS$SYSROOT:[GYROSCAN]ABAALKHAIL02010201010001.ANI;1 ...
  3094. File ID (2419,301,0)   End of file block 198 / Allocated 200
  3095.  
  3096. Virtual block number 1 (00000001), 512 (0200) bytes
  3097.  
  3098.  0000000C 00100008 ... 00000008 ........|...........=........... 000000
  3099.  00083932 2E36302E ... 2D524341 ACR-NEMA 1.0.. .....1994.06.29.. 000020
  3100.  00600008 4D5F4553 ... 00000030 0.......@.........A.....SE_M..`. 000040
  3101.  494B0000 00100080 ... 00000002 ....MR..p.....Philips ........KI 000060
  3102.  
  3103.  00183148 00000002 ... 32200000 .. 2........63865375........H1.. 0001E0
  3104. ^L
  3105. Dump of file SYS$SYSROOT:[GYROSCAN]ABAALKHAIL02010201010001.ANI;1 ...
  3106. File ID (2419,301,0)   End of file block 198 / Allocated 200
  3107.  
  3108. Virtual block number 2 (00000002), 512 (0200) bytes
  3109.  
  3110.  40000018 45424F52 ... 00161250 P.....AGACQ_PT_SURFACE_PROBE...@ 000000
  3111.  
  3112. And so on ... you get the idea. This ugly little C++ utility written quickly
  3113. during this moment of inspiration will take saved DUMP output and make it
  3114. binary again:
  3115.  
  3116. #include <fstream.h>
  3117.  
  3118. #include "MainCmd.h"
  3119.  
  3120. signed char
  3121. hextobin(char c)
  3122. {
  3123.     signed char r;
  3124.     switch (c) {
  3125.         case '0':    r=0; break;
  3126.                 case '1':       r=1; break;
  3127.                 case '2':       r=2; break;
  3128.                 case '3':       r=3; break;
  3129.                 case '4':       r=4; break;
  3130.                 case '5':       r=5; break;
  3131.                 case '6':       r=6; break;
  3132.                 case '7':       r=7; break;
  3133.                 case '8':       r=8; break;
  3134.                 case '9':       r=9; break;
  3135.         case 'A':
  3136.                 case 'a':       r=0xa; break;
  3137.                 case 'B':
  3138.         case 'b':       r=0xb; break;
  3139.                 case 'C':
  3140.         case 'c':       r=0xc; break;
  3141.                 case 'D':
  3142.         case 'd':       r=0xd; break;
  3143.                 case 'E':
  3144.         case 'e':       r=0xe; break;
  3145.                 case 'F':
  3146.         case 'f':       r=0xf; break;
  3147.         default:    r=-1; break;
  3148.     }
  3149.     return r;
  3150. }
  3151.  
  3152. int
  3153. main(int argc,char **argv)
  3154. {
  3155.     CCOMMAND(argc,argv);
  3156.  
  3157.     while (1) {
  3158.         const linemax=132;        // only needs 113
  3159.         char line[linemax];
  3160.         cin.getline(line,linemax);
  3161.         if (!cin || cin.eof()) {
  3162.             // cerr << "Bad or eof\n" << flush;
  3163.             break;
  3164.         }
  3165.         unsigned count=cin.gcount();
  3166.         if (count == 0 || line[0] != ' ') continue;
  3167.         if (count != 113) {
  3168.             cerr << "Line length " << count << "\n" << flush;
  3169.             break;
  3170.         }
  3171.         unsigned i;
  3172.         char *ptr = line + 8*(1+8);
  3173.         // line is in reverse order ...
  3174.         for (i=0; i<8; ++i) {
  3175.             unsigned j;
  3176.             for (j=0; j<4; ++j) {
  3177.                 // 2 hex bytes -> 1 byte
  3178.                 char bytelo = *--ptr;
  3179.                 char bytehi = *--ptr;
  3180.                 unsigned char byte
  3181.                     = (hextobin(bytehi)<<4)
  3182.                       + hextobin(bytelo);
  3183.                 cout.put(byte);
  3184.             }
  3185.             --ptr;    // space between long words
  3186.         }
  3187.     }
  3188.     return 0;
  3189. }
  3190.  
  3191.                       Note that the nature of fixed length records under VMS
  3192. means that the last record will be padded out to 512 bytes without any
  3193. indication of the "real" end-of-file. This means you have to cope with trailing
  3194. garbage gracefully.
  3195.  
  3196.                       Hot VMS/Philips news: neelin@pet.mni.mcgill.ca (Peter
  3197. Neelin) tells me there is an extremely useful tool for fiddling binary files
  3198. called FILE from DECUS. It allows you to change a file's header information
  3199. without modifying the content of the file. This then permits ftp, kermit, etc.
  3200. to do the right thing with Philips .ANI files. It also permits wildcards and
  3201. does not make a copy of the file (so it is fast). He says also that someone has
  3202. told him that they succeeded in using convert to fix these files, but his
  3203. general experience with it is not positive (it will often change the content of
  3204. the file and it doesn't allow wildcards, in addition to promoting the use of
  3205. the horrible fdl editor!). If you are interested, you can get FILE through
  3206. gopher from decus.org (look for the DECUS software library archives, under
  3207. essential tools). The binary is provided in case you don't have a compiler.
  3208.  
  3209.                       Some other useful hints:
  3210.  
  3211.                       - To log onto a serial terminal without executing the
  3212. login command file add "/NOCOM" to the username ... this way you can use the
  3213. operator console login which often won't require a password.
  3214.  
  3215.                       - There is a kermit available for the Vax under VMS (file
  3216. prefix "vms" in area or tape b) ... I use the "obsolete" version written in
  3217. Bliss, because it comes from the archives at columbia with a hex encoded
  3218. executable which can be uploaded just using an ordinary text capture into a
  3219. file, and doing the same with the short Macro hex program that can then be
  3220. assembled and used to make the convert into the real executable. Look in places
  3221. like [SYSEXE] first though to be sure Kermit is not already there. The generic
  3222. C version of kermit runs under VMS (file prefix "ck" in area or tape f), but
  3223. not every imaging machine comes with a VMS C compiler, whereas Macro is always
  3224. supposed to be there I gather. There is however also a hex encoded executable
  3225. of the C version in the archives (ckvker.hex) which I haven't tried, and is the
  3226. one that is recommended in the kermit documentation.
  3227.  
  3228.                       - There is apparently a zmodem for VMS but I don't know
  3229. where it comes from or how to get it.
  3230.  
  3231.                       - Serial ports are almost always defaulted to 9600 baud.
  3232.  
  3233.                       - "SET TERMINAL/ECHO" often isn't set.
  3234.  
  3235.               - Vax/VMS ftp conventions:
  3236.  
  3237.             UNIX FTP server     Vax/VMS FTP server
  3238.  
  3239.             cd dir                cd [.dir]
  3240.             cd dir/subdir         cd [.dir.subdir]
  3241.             cd ..                 cd [-]
  3242.  
  3243.               4.2.2.2 ULTRIX
  3244.               4.2.2.3 OSF
  3245.  
  3246.     4.3 Sun - Sun3 68000 and Sun4 Sparc
  3247.  
  3248.         4.3.1 Data
  3249.  
  3250.               The sun3 and sun4 architectures use much the same formats. Even
  3251. though the processors are different both are big-endian and the float formats
  3252. are IEEE. See the Sparc Architecture Manual - Chapter 3 - Data Formats for more
  3253. details.
  3254.               4.3.1.1 Integers
  3255.  
  3256.                       Integers are 8, 16, 32, or 64 bit unsigned or signed
  3257. two's complement and stored in big-endian format as on Data General and
  3258. opposite to the Dec VAX. Most C compilers treat short as 16 bits, and int and
  3259. long as 32 bits.
  3260.  
  3261.               4.3.1.2 Floating Point
  3262.  
  3263.                       Formats conform to IEEE 754-1985. Single precision real
  3264. values are 32 bits long, in big-endian format. The high bit is the sign bit,
  3265. followed by a 8 bit excess 127 exponent (power to which 2 must be raised) then
  3266. a 23 bit normalized mantissa with the decimal point to the left of the most
  3267. significant bit, from which 1.0 has been subtracted. Double precision values
  3268. have a 11 bit excess 1023 exponent and a 52 bit mantissa. Quad precision values
  3269. have a 15 bit excess 16383 exponent and a 112 bit mantissa.
  3270.  
  3271.             Sign
  3272.            |<-->|<-------- Exponent -------->|<------- Mantissa ------>|
  3273.             ______________ ______________ ______________ ______________
  3274.            |              |              |              |              |
  3275.            |______________|______________|______________|______________|
  3276.             31          28 27          24 23          20 19          16
  3277.            |<----------------------- Mantissa ------------------------>|
  3278.             ______________ ______________ ______________ ______________
  3279.            |              |              |              |              |
  3280.            |______________|______________|______________|______________|
  3281.             15          12 11           8 7            4 3            0
  3282.  
  3283.                       Here is a little piece of C++ code that should run on
  3284. anything and convert Sun IEEE floats to whatever the host's floating point
  3285. format is. It probably should take into account a few special cases to be
  3286. strictly correct:
  3287.  
  3288.         unsigned char buffer[4];
  3289.         instream.read(buffer,4);
  3290.         if (instream) {
  3291. #ifdef USESUN4NATIVEFLOAT
  3292.             float fvalue;
  3293.             memcpy ((char *)(&fvalue),buffer,4);
  3294.             value=fvalue;
  3295. #else  USESUN4NATIVEFLOAT
  3296.             unsigned char    sign;
  3297.             Uint16        exponent;
  3298.             Uint32        mantissa;
  3299.  
  3300.             typedef struct {
  3301.                 unsigned    sign : 1;
  3302.                 unsigned    exponent : 8;
  3303.                 unsigned    mantissa : 23;
  3304.             } IEEE_FLOAT_SINGLE;
  3305.  
  3306.             IEEE_FLOAT_SINGLE number;
  3307.             // Sparc is a Big Endian machine
  3308.             memcpy ((char *)(&number),buffer,4);
  3309.             sign     = number.sign;
  3310.             exponent = number.exponent;
  3311.             mantissa = number.mantissa;
  3312.  
  3313.             if (exponent) {
  3314.                 value = (1.0 + (double)mantissa / (1 << 23)) *
  3315.                     pow (2.0, (long)(exponent) - 127);
  3316.             }
  3317.             else {
  3318.                 if (mantissa) {
  3319.                     value = (double)mantissa / (1 << 23) *
  3320.                         pow (2.0, (long)(-126));
  3321.                 }
  3322.                 else {
  3323.                     value=0;
  3324.                 }
  3325.             }
  3326.             value = (sign == 0) ? value : -value;
  3327. #endif USESUN4NATIVEFLOAT
  3328.         }
  3329.         else {
  3330.             cerr << "read failed\n" << flush;
  3331.             value=0;
  3332.         }
  3333.  
  3334.               4.3.1.3 Strings
  3335.  
  3336.                       Strings obey the usual C convention of null terminated
  3337. strings without a length preamble.
  3338.  
  3339.         4.3.2 Operating System
  3340.  
  3341. 5.  Compression Schemes
  3342.  
  3343.     5.1 Reversible
  3344.     5.2 Irreversible
  3345.         5.2.1 Perimeter Encoding
  3346.  
  3347. 6.  Getting Connected
  3348.  
  3349.     6.1 Tapes
  3350.  
  3351.         Nine-track half-inch tapes were the old medium of choice for archiving
  3352. and image exchange and many older pieces of equipment will have these.
  3353. Unfortunately most people don't have such a drive on their workstation or
  3354. personal computer. There are several possibilities:
  3355.  
  3356.           - Use another piece of equipment that has a more modern or
  3357.            networked or serial-ported host and a nine-track drive, and
  3358.            use it to do the extraction. I used to use a networked Signa 4X
  3359.            to do this to extract GE 9800 CT tapes.
  3360.  
  3361.           - Visit your MIS department, which almost certainly has an archaic
  3362.            mainframe with a tape drive. Sometimes tough to get them to read
  3363.            formats they aren't expecting though (the hosts not the people
  3364.            I mean :) ).
  3365.  
  3366.           - Buy a nine-track for your workstation. This may seem a ridiculous
  3367.            idea given the price of new 6250 bpi drives are around $5,000, but
  3368.            one can often pick up bargain primitive non-6250 or refurbished
  3369.            drive that is adequate for the job.
  3370.  
  3371.         The Qualstar 1054 is one such drive, that attaches to a SCSI port, and
  3372. works with the regular SunOS SCSI tape driver, once a few tables in the kernel
  3373. have been updated as follows, and the kernel rebuilt:
  3374.  
  3375. {root}% pwd
  3376. /usr/kvm/sys/scsi/targets
  3377.  
  3378. {root}% diff -c stdef.h.prequalstar stdef.h
  3379. *** stdef.h.prequalstar Tue Aug 30 19:32:24 1994
  3380. --- stdef.h     Tue Aug 30 19:32:24 1994
  3381. ***************
  3382. *** 43,48 ****
  3383. --- 43,49 ----
  3384.   #define       ST_TYPE_FUJI            0x21    /* Fujitsu - (not tested) */
  3385.   #define       ST_TYPE_KENNEDY         0x22    /* Kennedy */
  3386.   #define       ST_TYPE_HP              0x23    /* HP */
  3387. + #define       ST_TYPE_QUALSTAR        0x24    /* Qualstar */
  3388.   #define       ST_TYPE_HIC             0x26    /* Generic 1/2" Cartridge */
  3389.   #define       ST_TYPE_REEL            0x27    /* Generic 1/2" Reel Tape */
  3390.  
  3391. {root}% diff -c st_conf.c.prequalstar st_conf.c
  3392. *** st_conf.c.prequalstar       Tue Aug 30 19:32:22 1994
  3393. --- st_conf.c   Tue Aug 30 19:32:22 1994
  3394. ***************
  3395. *** 153,158 ****
  3396. --- 153,174 ----
  3397.    * so our best guess as to their capabilities is
  3398.    * included herein.
  3399.    */
  3400. + /* Qualstar 1054 or 1260s scsi 9-track with 64KB buffer */
  3401. + {
  3402. +       "Qualstar 1054/1260s 1/2\" Reel", 7, "NCR ADP-53", ST_TYPE_QUALSTAR,
  3403. 10240,+       (ST_REEL | ST_VARIABLE | ST_BSF | ST_BSR),
  3404. +       300, 300,
  3405. +       { 0x00, 0x02, 0x06, 0x03},
  3406. +       {  0, 0, 0, 0 }
  3407. + },
  3408. + /* Qualstar 1054 scsi 9-track with 256KB buffer */
  3409. + {
  3410. +       "Qualstar 1054 1/2\" Reel", 10, "QUALSTAR10", ST_TYPE_QUALSTAR, 10240,
  3411. +       (ST_REEL | ST_VARIABLE | ST_BSF | ST_BSR),
  3412. +       300, 300,
  3413. +       { 0x00, 0x02, 0x06, 0x06},
  3414. +       {  0, 0, 0, 0 }
  3415. + },
  3416.   /* Wangtek QIC-150 1/4" cartridge */ {
  3417.         "Wangtek QIC-150", 14, "WANGTEK 5150ES", ST_TYPE_WANGTEK, 512,
  3418.         (ST_QIC | ST_AUTODEN_OVERRIDE),
  3419.  
  3420.         I got my Qualstar 1054 from Bill Power at Power Computer Services for
  3421. only $750 and have successfully read GE 9800 CT and Philips S15 MR tapes with
  3422. it so far. See the "Sources" section for where to get one.
  3423.  
  3424.         Once you have such a tape connected to the SCSI port, one can either
  3425. write simple programs to read files (easiest if the tape has variable length
  3426. records) or use shell scripts and the "dd" command with whatever the correct
  3427. block size is. See dd(1), mt(1), and mtio(3) for more information. Remember
  3428. that the read(2) call reads one fixed or variable length record at a time, and
  3429. returns 0 bytes read for a tape mark, and two tape marks in a row indicates the
  3430. end of the tape (normally). If you encounter short files with a series of
  3431. records 80 bytes long chances are you are dealing with header/end markers. This
  3432. is what ANSI standard tapes off VAX VMS seem to look like.
  3433.  
  3434.         Anyone who has any further information about tape formats and handling,
  3435. especially references to standard or on-line documents please let me know.
  3436.  
  3437.     6.2 Ethernet
  3438.  
  3439.     6.3 Serial Ports
  3440.  
  3441. -- 
  3442. David A. Clunie (dclunie@flash.us.com)
  3443. In sunny Riyadh, Saudi Arabia.
  3444. Archive-name: medical-image-faq/part2
  3445. Posting-Frequency: monthly
  3446. Last-modified: Sat Feb 18 16:42:58 GMT+0300 1995
  3447. Version: 2.01
  3448.  
  3449.  
  3450. 7.  Sources of Information
  3451.  
  3452.     7.1 Vendor Contacts
  3453.  
  3454.        - ANSI - Getting a Registered Organization Number for a DICOM UID Root:
  3455.  
  3456.                 Registration Coordinator
  3457.                 Michelle A. Maas
  3458.                 phone (212) 642-4900
  3459.                 phone (212) 642-4884
  3460.                 fax   (212) 398-0023
  3461.                 e-mail ATTMAIL.COM!MMAAS
  3462.                 X.400  C=US AD=ATTMAIL G=MICHELLE S=MAAS USER NAME=MMAAS
  3463.  
  3464.                 numeric identifier costs $1000 and takes 10 days
  3465.                 organization name  costs $1500 and takes 90 days
  3466.  
  3467.        - DICOM and ACR/NEMA standards:
  3468.  
  3469.                 NEMA Publication Sales
  3470.                 2101 L St. NW, Suite 300
  3471.                 Washington DC 20037-1526
  3472.                 phone (202) 457-8474
  3473.  
  3474.        - DICOM standards comments and working group information:
  3475.  
  3476.                 David Snavely, Staff Executive
  3477.                 NEMA
  3478.                 2101 L St. NW, Suite 300
  3479.                 Washington DC 20037-1526
  3480.                 phone (202) 457-1965
  3481.  
  3482.                 Gordon Bass
  3483.                 American College of Radiology
  3484.                 1891 Preston White Drive
  3485.                 Reston VA 22091
  3486.                 phone (703) 648-8900
  3487.  
  3488.        - FDA approval for PACS and Related Devices:
  3489.  
  3490.         Guidance for the Comment and Review of 510(k)
  3491.         Notifications for PACS and Related Devices
  3492.  
  3493.         Small Manufacturers Assistance
  3494.         phone (800) 638-2041
  3495.         fax   (301) 443-9435 (flash system for document delivery)
  3496.  
  3497.        - FDA standards:
  3498.  
  3499.         Fedworld Gateway
  3500.         modem (703) 321-8020
  3501.         telnet://fedworld.gov
  3502.         ftp://ftp.fedworld.gov
  3503.         http://www.fedworld.gov/
  3504.  
  3505.        - General Electric, contact for DICOM related stuff:
  3506.  
  3507.                 Donald E. Van Syckle
  3508.                 Senior Systems Analyst
  3509.                 GE Medical Systems
  3510.                 3200 N. Grandview Blvd.
  3511.                 Waukesha WI 53188
  3512.                 phone (414) 521-6262
  3513.                 fax   (414) 521-6800
  3514.                 email vansyckled@med.ge.com
  3515.  
  3516.        - General Electric, contact for image format information:
  3517.  
  3518.                 John Meissner
  3519.                 Networks Technical Leader
  3520.                 GE Medical Systems
  3521.                 N25 W23255 Paul Road
  3522.                 Pewaukee WI 53072
  3523.                 phone (414) 896-2707
  3524.                 email meissnerj@med.ge.com
  3525.  
  3526.        - General Electric, Ultrasound contact:
  3527.  
  3528.                 Paul Mullen
  3529.                 Radiology Product Manager
  3530.                 email logiq@med.ge.com
  3531.                 email mullenp@delphi.com (Paul Mullen)
  3532.  
  3533.        - Independent JPEG Group (IJG):
  3534.  
  3535.                 tgl@netcom.com (Tom Lane)
  3536.  
  3537.        - Interfile contacts:
  3538.  
  3539.                 cradduck@irus.rri.uwo.ca (Trevor Cradduck)
  3540.                 a.todd@ucl.ac.uk (Andrew Todd-Pokropek)
  3541.  
  3542.        - Images - digitized mammograms:
  3543.  
  3544.                 - no FTP site
  3545.                 - 50 each, normal and cancer mammograms
  3546.                 - digitized at 200 micrometers and 8 bits
  3547.                 - provide them with an appropriate tape
  3548.                 - Contact:
  3549.  
  3550.                 Maria Kallergi, PhD
  3551.                 Department of Radiology
  3552.                 University of South Florida
  3553.                 12901 Bruce B. Downs Blvd., Box 17
  3554.                 Tampa, FL   33612-4799
  3555.                 phone (813) 975-7873
  3556.                 fax   (813) 975-7831
  3557.                 email kallergi@rad.usf.edu
  3558.  
  3559.     7.2 Relevant FAQ's
  3560.  
  3561.        - Archive-name: graphics/resources-list/part[1-3]
  3562.        - Archive-name: graphics/faq
  3563.        - Archive-name: pixutils-faq
  3564.        - Archive-name: image-processing/Macintosh
  3565.        - Archive-name: sci-data-formats
  3566.        - Archive-name: compression-faq/part[1-3]
  3567.        - Archive-name: jpeg-faq
  3568.        - Archive-name: medical-image-faq/volume-visualization
  3569.  
  3570.        - DICOM FAQ
  3571.  
  3572.                   - maintained by dsc@xray.hmc.psu.edu (David S. Channin)
  3573.                   - periodically posted to comp.protocols.dicom
  3574.  
  3575.        - FITS basics and information (periodic posting)
  3576.  
  3577.                 - FITS (Flexible Image Transport System)
  3578.                 - for astronomical data
  3579.                 - periodically posted by
  3580.                       bschlesinger@nssdca.gsfc.nasa.gov (Barry M. Schlesinger)
  3581.                 - in sci.astro.fits,sci.data.formats
  3582.  
  3583.     7.3 Source Code
  3584.  
  3585.         See under FTP/WWW Sites
  3586.  
  3587.     7.4 Commercial Offerings
  3588.  
  3589.        - Anatomical images on CDROM and other atlases:
  3590.  
  3591.         A.D.A.M Software, Inc.
  3592.         phone (800) 408-ADAM Dept 502
  3593.         phone (800) 408-ADAM Dept 504
  3594.         phone (404) 980-0888
  3595.  
  3596.         Lifeart
  3597.         phone (800) 543-3278
  3598.         phone (216) 291-1922
  3599.  
  3600.         BodyWorks
  3601.         Software Marketing Corp
  3602.         9830 South 51st St, Bldg. A-131
  3603.         Phoenix, AZ  85044
  3604.         phone (602) 893-3377
  3605.  
  3606.         VoxelMan Atlas
  3607.         Springer-Verlag, Electronic Media
  3608.         175 Fifth Avenue
  3609.         New York, NY 10010
  3610.         phone  (212) 460-1682
  3611.         phone  (212) 533 5587
  3612.         email  blange@springer-ny.com
  3613.  
  3614.        - Conversion from proprietary formats:
  3615.  
  3616.         Phil Femano
  3617.         Medical Imaging Consultants
  3618.         phone (201) 812-1122
  3619.  
  3620.        - Conversion from proprietary to ACR/NEMA format (MedVision for Mac):
  3621.  
  3622.                 Evergreen Technologies
  3623.         Jeffrey Siegel
  3624.                 Main Street, PO Box 795
  3625.                 Castine  ME 04421
  3626.                 phone 207-326-8300
  3627.                 fax   207-326-8333
  3628.         email evergreen@applelink.apple.com
  3629.         email jsiegel@lunis.nucmed.luc.edu
  3630.         email 71035.3156@CompuServe.com
  3631.  
  3632.        - Data General RDOS & AOS TCP/IP solution:
  3633.  
  3634.                 Claflin & Clayton
  3635.                 203 Southwest Cutoff
  3636.                 Northboro, MA 01532
  3637.                 phone 508-393-7979
  3638.                 fax   508-393-8788
  3639.                 email clayton@c-c.com
  3640.                 email 70262.3663@compuserve.com
  3641.  
  3642.        - Data General themselves:
  3643.  
  3644.                 DG Direct
  3645.                 phone 1-800-343-8842
  3646.  
  3647.        - Interfaces between vendors and DICOM 3.0 toolkits:
  3648.  
  3649.                 DeJarnette Research Systems Inc.
  3650.                 Suite 700
  3651.                 401 Washington Avenue
  3652.                 Towson, Maryland 21204
  3653.                 USA
  3654.                 phone 410-583-0680
  3655.                 fax   410-583-0696
  3656.                 email info@dejarnette.com
  3657.  
  3658.                 Merge Technologies, Inc.
  3659.                 1126 S. 70th St
  3660.                 Milwaukee, Wisconsin 53214-3151
  3661.                 phone 414-475-4300
  3662.                 fax   414-475-3940
  3663.                 email dwight@merge.com (Dwight Simon)
  3664.  
  3665.                 Kodak Health Imaging Systems
  3666.                 18325 Waterview Parkway
  3667.                 Dallas TX 75252
  3668.                 phone 214-994-1266
  3669.                 fax   214-994-4180
  3670.                 email cbs@khis.com (C.B.Stone)
  3671.  
  3672.        - InterFormat - qsh to Interfile conversion, ACR/NEMA to qsh, et al.
  3673.  
  3674.                 - medical image format translation program
  3675.                 - automatically identifies and translates heterogeneous files
  3676.                 - Motif interface for user browsing & image selection
  3677.                 - input formats:
  3678.  
  3679.                         - GE 8800 CT, 9800 CT, Advantage CT & MR, Signa MR
  3680.                         - Technicare 2000 CT
  3681.                         - Positron PET
  3682.                         - Philips 300 Series CT
  3683.                         - Trionix Triad SPECT
  3684.                         - Siemens Somatom CT, Siemens Magnetom MR, CTI PET
  3685.                         - Varian CTSIM
  3686.                         - ACR-NEMA 1.0, ACR-NEMA 2.0, and AAPM/qsh
  3687.  
  3688.                 - output formats:
  3689.  
  3690.                         - AAPM/qsh
  3691.                         - Interfile
  3692.                         - ADAC Interfile
  3693.                         - Varian CTSIM
  3694.  
  3695.                 - other formats planned, including DICOM 3
  3696.  
  3697.                 David Reddy                       <--- USA contact
  3698.                 Radio Logic, Inc.
  3699.                 P.O. Box 9665
  3700.                 New Haven CT 06536
  3701.                 phone  (203) 624-8113
  3702.                 email  reddy@nucmed.med.nyu.edu
  3703.  
  3704.                 Bartec Medical Systems Ltd.       <--- UK, Europe & Mideast
  3705.                 Impression House
  3706.                 Invincible Road
  3707.                 Farnborough Hampshire
  3708.                 GU14 7NP England
  3709.                 email  bob@bartec.demon.co.uk
  3710.  
  3711.        - Network hardware for PACS/telemedicine/WAN.
  3712.  
  3713.         John A Hansen
  3714.         Networks Northwest Inc.
  3715.         PO Box 40209
  3716.         Bellevue Wa 98015
  3717.         phone  (800) 835-9462
  3718.         phone  (206) 641-8779
  3719.         fax    (206) 641-8909
  3720.         email  jahansen@networksnw.com
  3721.  
  3722.        - Plug-ins for Adobe Photoshop and NIH Image.
  3723.  
  3724.         
  3725.         - ImportACCESS
  3726.  
  3727.         A commercial Photoshop plugin that works with the many other
  3728.                 programs that support the plugin format. Reads fixed format
  3729.                 proprietary formats, and extra modules for ACR-NEMA 2.0,
  3730.                 DICOM 3.0, Interfile 3.3 files are available. Particularly
  3731.                 good at multi-slice images and color images, and clearly has
  3732.                 a nuclear medicine bias to it. Well documented. Recommended.
  3733.                 Note of potential bias - I was a beta tester.
  3734.  
  3735.         Hugh Lyshkow
  3736.         Designed Access
  3737.         702 Wrightwood Ave.
  3738.         Chicago IL 60614
  3739.         phone  (312) 880-2034
  3740.         fax    (312) 472-8834
  3741.         email  daccess@interaccess.com (Hugh Lyshkow)
  3742.         
  3743.  
  3744.        - Scanners for Xray films.
  3745.  
  3746.         Nathan Harris
  3747.         DBA Systems, Inc.
  3748.         phone  (407) 727-0660
  3749.         email  nharris@dba-sys.com
  3750.  
  3751.         Lumisys
  3752.  
  3753.         Cobrascan
  3754.  
  3755.         Vidar
  3756.  
  3757.         XRS
  3758.         email xrs@netcom.com
  3759.  
  3760.        - Tape drives - 9-track 1/2".
  3761.  
  3762.         Power Computer Services           <--- $750 Qualstar 1054 SCSI
  3763.         1132 Olympic Drive
  3764.         Corona CA 91719
  3765.         phone 800-323-0694
  3766.         phone 909-371-3992
  3767.         fax   909-371-1401
  3768.         email billp@cerfnet.com (Bill Power)
  3769.  
  3770.         Bill is also working on an 9-track interface replacement
  3771.         to record on removable hard disk cartridges, to upgrade
  3772.         old equipment.
  3773.  
  3774.        - Teleradiology equipment vendors.
  3775.  
  3776.         CompuMed Inc
  3777.         Cary Cole
  3778.         1200 No El Dorado Pl
  3779.         Suite C300
  3780.         Tucson AZ 85715
  3781.         phone 602-544-0544
  3782.         fax   602-722-9096
  3783.         email compumed@indirect.com
  3784.  
  3785.        - Video capture from medical devices.
  3786.  
  3787.         Precision Digital Images
  3788.         Lewis C. Larson
  3789.         6742 - 185th Ave. NE
  3790.         Suite 100
  3791.         Redmond, WA  98052
  3792.         phone 206-882-0218
  3793.         fax   206-867-9177
  3794.         email lewlar@aol.com (Lewis C. Larson)
  3795.  
  3796.        - Viewers for Mac and/or Windows:
  3797.  
  3798.                 Evergreen Technologies
  3799.         Jeffrey Siegel
  3800.                 Main Street, PO Box 795
  3801.                 Castine  ME 04421
  3802.                 phone 207-326-8300
  3803.                 fax   207-326-8333
  3804.         email evergreen@applelink.apple.com
  3805.         email jsiegel@lunis.nucmed.luc.edu
  3806.         email 71035.3156@CompuServe.com
  3807.  
  3808.         MultiView for Macintosh
  3809.         Image Data Corp.
  3810.         Don Alvarez
  3811.         11550 IH-10 West
  3812.         San Antonio, TX 78230-1024
  3813.         phone (210) 641-8340
  3814.         fax   (210) 641-7428
  3815.  
  3816.         Alice
  3817.         Hayden Image Processing Group
  3818.         Boulder, Colorado, USA
  3819.         phone (303) 449-3433
  3820.         fax   (303) 449-3772
  3821.         email help@perceptive.com
  3822.  
  3823.         Imaging Solutions
  3824.         phone (908) 780-7836
  3825.         email mdinkes@delphi.com (Marc Dinkes)
  3826.  
  3827.         SiteView (Windows and SunOS 4.x)
  3828.         Joe Shapiro
  3829.         phone (617) 674-2199
  3830.         fax   (617) 674-2217
  3831.         email gbb@ConSolve.com
  3832.         email joe@ConSolve.com
  3833.                 demo ftp://wuarchive.wustl.edu/graphics/graphics/demo-packages/
  3834.                 demo ftp://ftp.cica.indiana.edu/pub/pc/win3/demo/
  3835.  
  3836.        - Visible Human on CDROM.
  3837.  
  3838.         Research Systems, Inc
  3839.         email visible@rsinc.com
  3840.         email peter@rsinc.com (Peter Hallett)
  3841.  
  3842.     7.5 FTP/WWW sites
  3843.  
  3844.        - 3D Reconstruction:
  3845.  
  3846.                 - http://biocomp.arc.nasa.gov/3dreconstruction
  3847.  
  3848.        - 3DVIEWNIX (University of Pennsylvania):
  3849.  
  3850.         NB. The new 1.1 version has a different distribution policy
  3851.         and complete binary software, rather than just a demo, is
  3852.         available from the ftp site.
  3853.  
  3854.                 - ftp://mipgsun.mipg.upenn.edu/3DVIEWNIX1.1/BINARIES
  3855.                 - ftp://mipgsun.mipg.upenn.edu/3DVIEWNIX1.1/MPEG_MOVIES
  3856.                 - ftp://mipgsun.mipg.upenn.edu/3DVIEWNIX1.1/DATA
  3857.                 - ftp://mipgsun.mipg.upenn.edu/3DVIEWNIX1.1/PAPERS
  3858.                 - ftp://mipgsun.mipg.upenn.edu/3DVIEWNIX1.1/MANUALS
  3859.                 - ftp://mipgsun.mipg.upenn.edu/3DVIEWNIX1.1/SRC
  3860.                 - ftp://mipgsun.mipg.upenn.edu/3DVIEWNIX1.1/TUTORIALS
  3861.                 - http://mipgsun.mipg.upenn.edu
  3862.  
  3863.        - ACR Index of Radiologic Diagnoses (ascii text files):
  3864.  
  3865.                 - ftp://ftp.xray.hmc.psu.edu/acr_codes
  3866.                 - http://www.xray.hmc.psu.edu/
  3867.  
  3868.        - ACR/NEMA plugins for Adobe Photoshop (works with NIH Image also):
  3869.  
  3870.                 - ftp://sumex-aim.stanford.edu/info-mac
  3871.             
  3872.                     - /Graphic/Utility/photoshop-acr-nema.hqx
  3873.             
  3874.                 - ftp://zippy.nimh.nih.gov/pub/nih-image
  3875.  
  3876.             - /plug-ins/ACRNema.hqx
  3877.             - /user-macros/import_ACR_NEMA.txt
  3878.             
  3879.  
  3880.        - Anatomy - interactive programs:
  3881.  
  3882.                 - ftp://ftp.monash.edu.au/pub/medical
  3883.  
  3884.        - Anatomy - lung:
  3885.  
  3886.                 - http://indy.radiology.uiowa.edu
  3887.                          /rad/books/LungAnat/LungAnat.html
  3888.  
  3889.        - Angiography simulation:
  3890.  
  3891.                 - ftp://ftp.comp.vuw.ac.nz/pub/graphics/peter/xras-1.0.tar.gz
  3892.                 - http://www.comp.vuw.ac.nz/~peter/
  3893.  
  3894.        - Blood flow modelling:
  3895.  
  3896.                 - georgef@server1.usa (George Foutrakis)
  3897.                 - http://www.neuronet.pitt.edu:8910/~georgef
  3898.                 - http://www.pitt.edu/~gnfst1
  3899.  
  3900.        - CT reconstruction software:
  3901.  
  3902.                 - ftp://peipa.essex.ac.uk/ipa/src/process
  3903.  
  3904.                         - ct.tar.Z
  3905.                         - snark77.tar.Z
  3906.  
  3907.        - Clip Art of things medical:
  3908.  
  3909.                 - http://www.mindspring.com/~mperloe/gallery.html
  3910.                 - ftp://goofy.cs.umd.edu/f/clipart/medical
  3911.  
  3912.        - Dermatology:
  3913.  
  3914.                 - http://www.rrze.uni-erlangen.de/
  3915.  
  3916.                     - /docs/FAU/fakultaet/med/kli/derma/
  3917.  
  3918.        - DICOM conformance statements:
  3919.  
  3920.                 -  General Electric.
  3921.             ftp://ftp.med.ge.com/pub/dicom
  3922.  
  3923.                 -  Index.
  3924.             http://www.xray.hmc.psu.edu/
  3925.  
  3926.        - DICOM conversion tools (from proprietary formats) and utilities:
  3927.  
  3928.                 - dicom3tools_*.tar.gz
  3929.             
  3930.             - ftp://ftp.rahul.net/pub/dclunie
  3931.                     - http://www.rahul.net/dclunie
  3932.             
  3933.  
  3934.        - DICOM data dictionary:
  3935.  
  3936.                 - From NIH ftp://zippy.nimh.nih.gov/pub/nih-image
  3937.             
  3938.             - /documents/dicom-dict.txt
  3939.             
  3940.                 - In dicom3tools_*.tar.gz
  3941.             
  3942.             - ftp://ftp.rahul.net/pub/dclunie
  3943.                     - http://www.rahul.net/dclunie
  3944.             
  3945.  
  3946.        - DICOM draft standards:
  3947.  
  3948.                - ftp://ftp.xray.hmc.psu.edu/dicom_docs
  3949.                - ftp://ftp.uni-oldenburg.de/pub/dicom/dicom_docs
  3950.  
  3951.         - DICOM RSNA demonstration software:
  3952.  
  3953.                  Contact smm@wuerl.wustl.edu (Steve Moore)
  3954.  
  3955.                 - ftp://wuerlim.wustl.edu/pub/dicom
  3956.  
  3957.                 - ftp://ftp.xray.hmc.psu.edu/dicom_software
  3958.  
  3959.                         - /Mallinckrodt
  3960.                          Mallinkrodt RSNA
  3961.                         - /European
  3962.                          European CEN/TC251/WG4
  3963.  
  3964.                 - ftp://ftp.uni-oldenburg.de/pub/dicom/dicom_software
  3965.  
  3966.                 - Linux port of Mallinckrodt CTN software
  3967.  
  3968.                         - From ftp://ss10.numed.szote.u-szeged.hu/pub/MIR-CTN/
  3969.  
  3970.                             - Modified sources /Linux/CTN.Linux.tar.Z
  3971.                             - Compiled binaries /Linux/CTN.Linux.bin.tar.Z
  3972.  
  3973.                         - Ported by boti@ss10.numed.szote.u-szeged.hu
  3974.  
  3975.         - DICOM sample images:
  3976.  
  3977.                - ftp://wuerlim.wustl.edu/pub/dicom/images/version3
  3978.  
  3979.                - In the Mallinckrodt software, there are a few sample
  3980.         images ... look in:
  3981.  
  3982.                        - apps/simple_storage/D19051502.9
  3983.                        - apps/simple_storage/D19051513.9
  3984.                         (contain images, but are ACR/NEMA 2 and missing lots
  3985.                         of required type 1 and 2 attributes)
  3986.  
  3987.         same in:
  3988.  
  3989.                        - apps/send_image
  3990.                        - apps/move_image
  3991.  
  3992.         also:
  3993.  
  3994.                        - apps/displays/TEST_IMAGES/baby.color.img
  3995.                         (contains image, but is not legal DICOM 3 (no UID's))
  3996.                        - apps/displays/TEST_IMAGES/ct1.1
  3997.                         (valid DICOM 3 CT IOD (passes Mallinckrodt dcm_verify))
  3998.  
  3999.                 - ftp://ftp.med.ge.com/pub/dicom
  4000.                 - http://www.xray.hmc.psu.edu/public/med_img_dbs.html
  4001.  
  4002.        - Dr. Razz - image viewer for MAC:
  4003.  
  4004.                 - ftp://ftp.u.washington.edu/pub/user-supported/razz
  4005.                 - ftp://ftp.u.washington.edu/public/razz
  4006.                 - http://www.rad.washington.edu/
  4007.  
  4008.         The author (Thurman Gillespy tg3@u.washington.edu) writes:
  4009.  
  4010.         Dr Razz is a 16 bit medical image display and analysis
  4011.         program for Macintosh computers. Dr Razz can window and
  4012.         level on full 16 bit image data in near real time on any
  4013.         Macintosh color computer. Images can be viewed individually,
  4014.         or an image series can be viewed in an image stack. The
  4015.         program attempts to automatically open CT and MRI images,
  4016.         and can usually handle different header sizes and byte order.
  4017.         The program can directly read the headers of images created
  4018.         with the GE Image Extract Tool, and can automatically handle
  4019.         compressed images created with this utility. Dr Razz is not a
  4020.         DICOM viewer, although it can probably automatically open many
  4021.         CT/MRI DICOM images if they are not compressed. An option for
  4022.         manually entering image parameters for problem files is
  4023.         available. Images can be saved as PICT files, and TIFF support
  4024.         will be added.
  4025.  
  4026.        - FITS (Flexible Image Transport System) for astronomical data:
  4027.  
  4028.                 - ftp://fits.cv.nrao.edu/fits
  4029.                 - ftp://nssdca.gsfc.nasa.gov/FITS
  4030.  
  4031.        - Graphics file formats (gif,tiff,etc.)
  4032.  
  4033.                 - ftp://zamenhof.cs.rice.edu/pub/graphics.formats
  4034.  
  4035.        - Hierarchical Database Management System (astronomy images):
  4036.  
  4037.                 - ftp://starlink-ftp.rl.ac.uk/pub/doc/star-docs/sun92.tex
  4038.                 - http://star-www.rl.ac.uk/
  4039.  
  4040.        - Interfile sources -  see Nucmed ftp site at UWO.
  4041.  
  4042.        - JPEG Sources
  4043.  
  4044.                - PVRG-JPEG CODEC:
  4045.  
  4046.                 ftp://havefun.stanford.edu/pub/jpeg
  4047.  
  4048.                         Supports
  4049.  
  4050.                           - sequential DCT baseline,
  4051.                           - lossless modes.
  4052.  
  4053.                 - IJG:
  4054.  
  4055.                  ftp.uu.net/graphics/jpeg
  4056.  
  4057.                         Supports
  4058.  
  4059.                           - sequential DCT baseline,
  4060.                           - 12 bit DCT modes.
  4061.  
  4062.        - Kermit distribution:
  4063.  
  4064.                 - ftp://ftp.cc.columbia.edu/kermit
  4065.  
  4066.        - LUNIS - Loyola University Nuclear Medicine Information System
  4067.  
  4068.                 - http://147.126.104.3/
  4069.  
  4070.                 contact jhalama@lunis.nucmed.luc.edu (Jim Halama) for
  4071.         access, which is restricted ((708) 216-3777)
  4072.  
  4073.        - Medical imaging research (University of Leeds):
  4074.  
  4075.                 - http://agora.leeds.ac.uk/comir/comir.html
  4076.  
  4077.        - Medical Informatics standards, including HL7:
  4078.  
  4079.                 - ftp://dumccss.mc.duke.edu/standards
  4080.  
  4081.                         - read-me.txt
  4082.                         - HL7/pubs/version2.2/ballot1.zip
  4083.  
  4084.        - Neuroscience Resources List:
  4085.  
  4086.                 - http://golgi.harvard.edu/biopages/neuro.html
  4087.  
  4088.        - NIH Image - Macintosh image processing software:
  4089.  
  4090.                 - ftp://zippy.nimh.nih.gov/pub/nih-image
  4091.  
  4092.        - PACS - EurIPACS:
  4093.  
  4094.                 - http://www.rad.unipi.it:7080/
  4095.  
  4096.                     - /works/imphone/presentation-imphone.html
  4097.  
  4098.        - Papyrus and Osiris ftp site:
  4099.  
  4100.                 - ftp://expasy.hcuge.ch/pub/Osiris
  4101.             
  4102.             - Papyrus specifications for versions 2.1 and 3.
  4103.             - Osiris for Mac, PC and Unix (SunOS, Solaris, Dec).
  4104.             - Sample images for Dicom, Papyrus 2 and Papyrus 2.
  4105.             
  4106.                 - http://expasy.hcuge.ch/www/UIN/UIN.html
  4107.  
  4108.        - Nucmed ftp site at UWO (run by Trevor Cradduck (cradduck@uwo.ca)):
  4109.  
  4110.                 - ftp://uwovax.uwo.ca/PUB:[000000.NUCMED]
  4111.  
  4112.        - Penn State Radiology Web Server:
  4113.  
  4114.                 - http://www.xray.hmc.psu.edu/
  4115.  
  4116.        - PET:
  4117.  
  4118.                 - http://www-ipg.umds.ac.uk/pet/petcen.html
  4119.  
  4120.        - Physics:
  4121.  
  4122.                 - http://www.physics.mcgill.ca/physics-services/
  4123.                 - http://tph.tuwien.ac.at/physics-services/
  4124.  
  4125.        - Qsh by ftp:
  4126.  
  4127.                 - ftp://nucmed.med.nyu.edu/pub
  4128.  
  4129.                         - /dist
  4130.                                  compressed tar
  4131.                         - /qsh
  4132.                                  source
  4133.  
  4134.        - Radiological Society of North America - On-Line Sources:
  4135.  
  4136.                 - http://www.rsna.org
  4137.                 - http://www.rsna.org/edu/internet.html
  4138.  
  4139.        - Radiology History:
  4140.  
  4141.                 - http://www.fh-wuerzburg.de/roentgen/
  4142.  
  4143.        - Sample mammogram images:
  4144.  
  4145.                 - miasdb@icr.ac.uk (J.Suckling) (Normal and abnormal)
  4146.  
  4147.                 - ftp://ftp.xray.hmc.psu.edu/mammo (10 Normal)
  4148.                 - http://www.xray.hmc.psu.edu/
  4149.  
  4150.        - Sample medical images (may be out of date):
  4151.  
  4152.                 - ftp://fokus.uke.uni-hamburg.de/.voxelman.images
  4153.                 - ftp://rwja.umdnj.edu/pub
  4154.                 - gopher://gopher.austin.unimelb.edu.au/11/images/petimages/
  4155.                 - ftp.nihon-u.ac.jp/pub/data/MRIMonkeyHead
  4156.                 - http://ftp.nc.nihon-u.ac.jp/pub/data/MRIMonkeyHead
  4157.                 - ftp://decaf.stanford.edu/pub/images/medical/mri
  4158.                 - ftp://eedsp.gatech.edu/database/images/wchung/medical
  4159.                 - ftp://omicron.cs.unc.edu/pub/softlab/CHVRTD
  4160.                 - http://foyt.indyrad.iupui.edu/medres/iurad2.html
  4161.                 - ftp://ccsun.unicamp.br
  4162.                 - ftp://boris.umds.ac.uk/pub/images
  4163.                 - http://www-ipg.umds.ac.uk/
  4164.  
  4165.        - University of Washington Teaching File (mrich@u.washington.edu):
  4166.  
  4167.                 - http://www.rad.washington.edu/
  4168.  
  4169.                 1.  Radiology Teaching File (CME credit)
  4170.                 2.  Anatomy Teaching Modules
  4171.                 3.  Radiology Exhibits from UW
  4172.                 4.  Information on UW radiology residency/fellowship programs
  4173.                 5.  Image processing software written by UW faculty
  4174.  
  4175.        - University of Western Ontario Teaching File:
  4176.  
  4177.                 - http://johns.largnet.uwo.ca
  4178.  
  4179.        - Vax help - "The Vax Book" by Joseph E St Sauver, U of Oregon:
  4180.  
  4181.                 - ftp://decoy.uoregon.edu
  4182.  
  4183.        - Visible Human Project
  4184.  
  4185.                 - http://www.nlm.nih.gov/
  4186.  
  4187.                     - /factsheets.dir/visible_human.html
  4188.                     - /extramural_research.dir/visible_gallery.html
  4189.  
  4190.         Dr. Michael J. Ackerman
  4191.         Project Officer, Visible Human Project
  4192.         National Library of Medicine
  4193.         8600 Rockville Pike
  4194.         Bethesda, MD 20894
  4195.  
  4196.         Need to sign an agreement with the NLM before one can
  4197.         transfer the 15 GB of data or buy tapes.
  4198.  
  4199.         Tape can be purchased from NTIS (301) 402-4100 in Unix
  4200.         tar format for $1000.
  4201.  
  4202.        - Wavelet compression software:
  4203.  
  4204.                 - ftp://pascal.math.yale.edu/pub/wavelets
  4205.                 - ftp://pascal.math.yale.edu/pub/software
  4206.  
  4207.        - Window level software (12/16 bits ->8):
  4208.  
  4209.                 - ftp://alvin.ach.uams.edu/pub/winlev.tar.Z (Includes images)
  4210.                 - ftp://alvin.ach.uams.edu/pub/winlev-noimages.tar.gz
  4211.  
  4212.        - Wxwin software:
  4213.  
  4214.                 - ftp://skye.aiai.ed.ac.uk/pub/wxwin
  4215.  
  4216.        - Xsee - X-windows based display program for raw images:
  4217.  
  4218.                 - available from thurn@amadeus.ece.ucsb.edu (Stefan Thurnhofer)
  4219.  
  4220. -- 
  4221. David A. Clunie (dclunie@flash.us.com)
  4222. In sunny Riyadh, Saudi Arabia.
  4223. Archive-name: medical-image-faq/part2
  4224. Posting-Frequency: monthly
  4225. Last-modified: Sat Feb 18 16:42:58 GMT+0300 1995
  4226. Version: 2.01
  4227.  
  4228.  
  4229.     7.6 Mailservers
  4230.  
  4231.        - Ftpmail:
  4232.  
  4233.                 Ftpmail is a service provided by some extremely generous
  4234.                 sites that allow you to send ftp commands to them by email
  4235.                 and the server executes the commands and sends the results
  4236.                 back. Very few sites offer this because of the huge load
  4237.                 and potential for abuse. I only mention it here because a
  4238.                 lot of medical imaging people don't seem to have anonymous
  4239.                 ftp access.
  4240.  
  4241.                 To find out more, fetch the relevant FAQ from the mailserver
  4242.                 at "mail-server@rtfm.mit.edu" with a message body:
  4243.  
  4244.                         send usenet/news.answers/ftp-list/faq
  4245.  
  4246.                 The most commonly used site is "ftpmail@decwrl.dec.com" (send
  4247.                 "help" (no quotes) in the message body).
  4248.  
  4249.        - HSPNET-L Hospital Computer Network Discussion Group and Data Base:
  4250.  
  4251.         Run by Don Parsons dfp10%albnydh2.bitnet@uacsc2.albany.edu.
  4252.  
  4253.         - To subscribe:
  4254.  
  4255.             To: listserv%albnydh2.bitnet@uacsc2.albany.edu
  4256.             Subject:
  4257.             SUBSCRIBE HSPNET-L your_full_name
  4258.  
  4259.         - For the monthly digest:
  4260.  
  4261.             To: listserv%albnydh2.bitnet@uacsc2.albany.edu
  4262.             Subject:
  4263.             AFD ADD HSP* DIGEST HSPNET-L
  4264.  
  4265.         - To contribute (if subscribed):
  4266.  
  4267.             To: hspnet-l%albnydh2.bitnet@uacsc2.albany.edu
  4268.  
  4269.         - To download from the LISTSERV Database:
  4270.  
  4271.             To: listserv%albnydh2.bitnet@uacsc2.albany.edu
  4272.             Subject:
  4273.             INDEX HSPNET-L
  4274.             GET <filename> <filetype>
  4275.  
  4276.         HSPNET-L is mirrored by "sci.med.telemedicine" Usenet newsgroup.
  4277.  
  4278.        - Interfile mailing list:
  4279.  
  4280.                 Don't know much about this list, but I am sure that
  4281.                 atoddpok@medphys.ucl.ac.uk (Andrew Todd-Pokropek) would
  4282.                 be able to fill you in on this.
  4283.  
  4284.        - Medimagex list for medical image format discussions:
  4285.  
  4286.                 Precursor to "alt.image.medical" usenet news group. Now
  4287.                 essentially defunct. Maybe useful if you don't have
  4288.                 Usenet News access.
  4289.  
  4290.         - command address:   listserver@cs.columbia.edu
  4291.                 - commands:          in message body not subject
  4292.                 - list name:         MEDIMAGEX
  4293.                 - to get help:       HELP and/or HELP LISTSERV
  4294.                 - to subscribe:      SUBSCRIBE MEDIMAGEX firstname lastname
  4295.                                     (NB. not your email address, that is
  4296.                                      derived from the 'From ' header line)
  4297.                 - to unsubscribe:    UNSUBSCRIBE MEDIMAGEX
  4298.                 - to send to list:   medimagex@cs.columbia.edu
  4299.  
  4300.        - Nucmed mailing list for medical physicists:
  4301.  
  4302.                 - to subscribe:          nucmed-request@irus.rri.uwo.ca
  4303.                 - to unsubscribe, etc.:  nucmed-owner@irus.rri.uwo.ca
  4304.                 - to send to list:       nucmed@uwo.ca
  4305.                 - the relevant human:    cradduck@uwo.ca (Trevor Cradduck)
  4306.  
  4307.                 This list is not actually gated to "sci.med.physics",
  4308.         though Trevor often reposts significant items.
  4309.  
  4310.                 See also Nucmed ftp site at UWO.
  4311.  
  4312.        - Radiation Safety Distribution list:
  4313.  
  4314.         For Health Physicists, Medical Physicists, Radiological
  4315.         Engineers and others who have a professional interest in
  4316.         matters related to Radiation Protection.
  4317.  
  4318.         RADSAFE@romulus.ehs.uiuc.edu
  4319.  
  4320.        - Radiologic Science Discussion Group - Radsci-L:
  4321.  
  4322.          Discussion may choose to center around radiologic science
  4323.          education, medical radiography, CT (computerized scanning),
  4324.          MRI (magnetic resonance scanning), sonography, nuclear
  4325.          medicine, radiation oncology, veterinary medicine, industrial
  4326.          applications, radiologic patient care, etc.
  4327.  
  4328.         - command address:   mailserv@western.tec.wi.us
  4329.                 - commands:          in message body not subject
  4330.                 - list name:         Radsci-L
  4331.                 - to subscribe:      subscribe Radsci-L firstname lastname
  4332.                                     (NB. not your email address, that is
  4333.                                      derived from the 'From ' header line)
  4334.  
  4335.        - sci.med.radiology gateway:
  4336.  
  4337.         sci.med.radiology@news.cs.indiana.edu
  4338.  
  4339.     7.7 References
  4340.  
  4341.        - DICOM - Directory of Resources:
  4342.  
  4343.                 "DICOM Tools for End User Applications
  4344.                 and System Integration"
  4345.                 Presented at EuroPACS'94 Geneva Switzerland
  4346.                 Dwight Simon
  4347.  
  4348.                 Merge Technologies, Inc.
  4349.                 1126 S. 70th St. Suite N508B
  4350.                 Milwaukee, Wisconsin 53214-3151
  4351.                 phone 414-475-4300
  4352.                 fax   414-475-3940
  4353.                 email dwight@merge.com (Dwight Simon)
  4354.  
  4355.        - DICOM - General:
  4356.  
  4357.                 Kodak "Understanding DICOM 3.0" for $US 12.50 (no credit cards)
  4358.  
  4359.                 Angie Helms
  4360.                 Kodak Health Imaging Systems
  4361.                 18325 Waterview Parkway
  4362.                 Dallas TX 75252
  4363.                 phone 1-800-767-3448
  4364.  
  4365.        - DICOM - Implementation:
  4366.  
  4367.                 "Implementation of the DICOM 3.0 Standard
  4368.                     - A Pragmatic Handbook"
  4369.                 Robert Hindel, Editor
  4370.  
  4371.         RH Consulting
  4372.                 483 Ridge Road
  4373.                 Orange CT 06477-2830
  4374.                 phone 203-799-2258
  4375.                 fax   203-795-8640
  4376.                 email 73030.1366@compuserve.com (Robert Hindel)
  4377.  
  4378.         Radiological Society of North America
  4379.                 2021 Spring Road Suite 600
  4380.                 Oak Brook IL 60521
  4381.  
  4382.        - PACS:
  4383.  
  4384.                 Understanding PACS:Picture Archiving & Communications Systems
  4385.  
  4386.                 available for $5 from:
  4387.  
  4388.                         SCAR, Society for Computer Applications in Radiology
  4389.                         4750 Lindle Road,
  4390.                         P.O. Box 8800
  4391.                         Harrisburg, PA 17105-8800
  4392.                         phone 717-561-5266
  4393.  
  4394.        - Telemedicine:
  4395.  
  4396.                 Rural TeleHealth:Telemedicine,Distance Education &
  4397.                 Informatics for Rural Health Care, A Report of the Office
  4398.                 of Rural Health Policy Health Resources and Services
  4399.                 Administration, DHSS (Nov,1993)
  4400.  
  4401.                 available for $8 from:
  4402.  
  4403.                         WICHE Publications
  4404.                         Western Interstate Commission for Higher Education
  4405.                         P.O. Drawer P
  4406.                         Boulder, CO  80301-9752
  4407.                         phone (303) 541-0290
  4408.                         fax   (303) 541-0291
  4409.  
  4410.        - Wavelet compression:
  4411.  
  4412.                 Press, et al. Numerical Recipes in C.
  4413.                 Chapter 13.10. Wavelet Transforms.
  4414.  
  4415.                 Cody,MA. The Wavelet Packet Transform.
  4416.                 Dr. Dobb's Journal, April '94
  4417.  
  4418.     7.8 Organizations and Societies
  4419.  
  4420.        - IEEE Transactions on Medical Imaging
  4421.  
  4422.         Mike Vannier
  4423.         Mallinckrodt Institute of Radiology
  4424.         Washington University Medical Center
  4425.         510 South Kingshighway Blvd.
  4426.         St. Louis, MO 63110
  4427.  
  4428.        - Society for Computer Applications in Radiology
  4429.  
  4430.         4750 Lindle Road,
  4431.         P.O. Box 8800
  4432.         Harrisburg, PA 17105-8800
  4433.         phone 717-561-5266
  4434.         email 73531.1173@compuserve.com
  4435.         email tg3@u.washington.edu (Thurman Gillespy).
  4436.  
  4437.                - Web server is at http://www.scar.rad.washington.edu/
  4438.  
  4439.                - Official journal is the "Journal of Digital Imaging".
  4440.  
  4441.                - Last meeting was S/CAR'94 held in Winston-Salem,
  4442.                 North Carolina during June 1994.
  4443.  
  4444.                - (membership is considered mandatory for FAQ readers :) )
  4445.  
  4446.     7.9 Usenet Newsgroups
  4447.  
  4448.        - alt.graphics.pixutils
  4449.        - alt.image.medical
  4450.        - alt.med.equipment
  4451.        - comp.graphics
  4452.        - comp.graphics.algorithms
  4453.        - comp.graphics.pixutils
  4454.        - comp.graphics.research
  4455.        - comp.protocols.dicom
  4456.        - sci.data.formats
  4457.        - sci.med.emergency
  4458.        - sci.med.informatics
  4459.        - sci.med.physics
  4460.        - sci.med.radiology
  4461.        - sci.med.telemedicine
  4462.        - sci.med.vision
  4463.  
  4464. 8.  Acknowledgements
  4465.  
  4466.     Thanks to the following people for contributions, general help, interesting
  4467. postings or mail whose contents have found there way in here, or just plain old
  4468. moral support. If I have inadvertently omitted anyone, sorry !
  4469.  
  4470.                -                     <axagarwa@seldon.cs.twsu.edu>
  4471.                -                     <clp@acs.bu.edu>
  4472.                - Aaron Davis         <Aaron_Davis@iucc.iupui.edu>
  4473.                - Alan Rowberg        <rowberg@u.washington.edu>
  4474.                - Allen Rueter        <allen@wuerl.WUstl.EDU>
  4475.                - Alvis D. Harding Jr <adh@george.ach.uams.edu>
  4476.                - Andreas Bittorf <Andreas.Bittorf@derma.med.uni-erlangen.de>
  4477.                - Andreas Pommert     <pommert@uke.uni-hamburg.de>
  4478.                - Andrei Cornoiu      <cornoiu@monu1.cc.monash.edu.au>
  4479.                - Andrew ToddPokropek <a.todd@ucl.ac.uk>
  4480.                - Andy Hewett         <Andy.Hewett@informatik.uni-oldenburg.de>
  4481.                - Bob Dempsey         <dempsey@metronet.com>
  4482.                - Bob Manich          <rdm@wdl.loral.com>
  4483.                - Botond K. Szabo     <boti@ss10.numed.szote.u-szeged.hu>
  4484.                - Bud Wendt           <rwendt@bcm.tmc.edu>
  4485.                - C.B.Stone           <cbs@khis.com>
  4486.                - CC Yau              <ccyau@iohk.com>
  4487.                - Charles Bird        <cb@xerxes.umds.ac.uk>
  4488.                - Christoph Ozdoba    <ozdoba@insel.unibe.ch>
  4489.                - Chuck Batishko      <cr_batishko@pnl.gov>
  4490.                - Craig D. von Land   <craig@care3.uab.es>
  4491.                - David P Reddy       <reddy@nucmed.med.nyu.edu>
  4492.                - David S. Channin    <dsc@xray.hmc.psu.edu>
  4493.                - Derek Hill          <D.Hill@umds.ac.uk>
  4494.                - Dick St.Peters      <stpeters@NetHeaven.com>
  4495.                - Dick St.Peters      <stpeters@dawn.crd.ge.com>
  4496.                - Don Parsons         <dfp10%albnydh2.bitnet@uacsc2.albany.edu>
  4497.                - Donald Van Syckle   <vansyckled@med.ge.com>
  4498.                - Dwight Simon        <dwight@merge.com>
  4499.                - Edward Gosfield     <gosfield@udcemail.udc.upenn.edu>
  4500.                - Eric John Finegan   <efinegan@dejarnette.com>
  4501.                - Fred W. Prior       <prior@xray.hmc.psu.edu>
  4502.                - George Foutrakis    <georgef@server1.usa>
  4503.                - Gerald Q. Maguire   <maguire@it.kth.se>
  4504.                - Gerrit Visser       <gerrit@isgtec.com>
  4505.                - Greg Gibbs          <ggibbs@csn.net>
  4506.                - Guillaume Thelissen <Guillaume.Thelissen@RAD.RULIMBURG.NL>
  4507.                - Gunther Nowotny     <gnowotny@tph23.tuwien.ac.at>
  4508.                - Herve Delingette    <hdeling@hippocrate.inria.fr>
  4509.                - Hugh Lyshkow        <daccess@interaccess.com>
  4510.                - Irene Gearin        <ireneg@isgtec.com>
  4511.                - James Harrison      <james@hplb.hpl.hp.com>
  4512.                - Jeff Paynowski      <paynowsk@ct.picker.com>
  4513.                - Jeff Wade           <wade@kegs.saic.com>
  4514.                - Jeffrey Siegel      <jsiegel@lunis.nucmed.luc.edu>
  4515.                - Jerry McCarthy      <ab003@freenet.HSC.Colorado.EDU>
  4516.                - Jim Berilla         <jb@falstaff.MAE.cwru.edu>
  4517.                - Jim Swan            <jim@swanmed.com>
  4518.                - Joe Shapiro         <joe@consolve.com>
  4519.                - Joel Davis          <jdavis@iea.com>
  4520.                - John A. Hansen      <jahansen@halcyon.halcyon.com>
  4521.                - John Clayton        <clayton@c-c.com>
  4522.                - John Hearns         <johnh@gerbil.umds.ac.uk>
  4523.                - John L. Groezinger  <jlgroezinger@mmm.com>
  4524.                - John Meissner       <meissnerj@med.ge.com>
  4525.                - K Schulze           <kschulze@aol.com>
  4526.                - Keith Robison       <robison@nucleus.harvard.edu>
  4527.                - Kevin Montgomery    <kevin@biocomp.arc.nasa.gov>
  4528.                - Krishna Iyer        <iyer@mipg.upenn.edu>
  4529.                - Lasse Jyrkinen      <ljj@stekt16.oulu.fi>
  4530.                - Marilyn E Noz       <noz@nucmed.NYU.EDU>
  4531.                - Mark Dinkes         <mdinkes@delphi.com>
  4532.                - Mark Perloe         <mperloe@mindspring.com>
  4533.                - Martin Liversage    <operator@iris.kth.dk>
  4534.                - Matthew T. Adams    <mtadams@columbine.hsc.colorado.edu>
  4535.                - Matti Haveri        <mhaveri@cc.oulu.fi>
  4536.                - Michael P. McIntyre <mikey@lobby.ti.com>
  4537.                - Michael Richardson  <mrich@u.washington.edu>
  4538.                - Nathan A. Harris    <nharris@dba-sys.com>
  4539.                - Neil Weisenfeld     <weisen@alw.nih.gov>
  4540.                - Nick Efford         <nde@dcre.leeds.ac.uk>
  4541.                - Pat Wallace         <ptw@rlsaxp.bnsc.rl.ac.uk>
  4542.                - Paul Malloy         <Paul_Malloy@brown.edu>
  4543.                - Paul Mullen         <mullenp@delphi.com>
  4544.                - Peter Hall          <Peter.Hall@comp.vuw.ac.nz>
  4545.                - Peter Hallett       <peter@rsinc.com>
  4546.                - Peter Jurgensen     <pju@vision.auc.dk>
  4547.                - Peter Neelin        <neelin@pet.mni.mcgill.ca>
  4548.                - Phil Pillet         <eng48bxny@aol.com>
  4549.                - Phillip Berman      <compumed@indirect.com>
  4550.                - R. Krishnamurthy    <rk@cedar.Buffalo.EDU>
  4551.                - Rafael Pous         <pous@gaig.upc.es>
  4552.                - Rex Harmon          <indexrex@aol.com>
  4553.                - Richard R Carlton   <rcarlton@magnus.acs.ohio-state.edu>
  4554.                - Robert Hindel       <73030.1366@compuserve.com>
  4555.                - Roch Comeau         <roch@nil.mni.mcgill.ca>
  4556.                - Rutie Adar          <rutie@asp.co.il>
  4557.                - Scott M Metzger     <smetzger@harp.aix.calpoly.edu>
  4558.                - Shigeru Muraki      <muraki@etl.go.jp>
  4559.                - Steve Moore         <smm@wuerl.wustl.edu>
  4560.                - Thurman Gillespy    <tg3@u.washington.edu>
  4561.                - Tom Lane            <tgl@netcom.com>
  4562.                - Tracy N. Tipping    <tipping@phys.ksu.edu>
  4563.                - Trevor Cradduck     <cradduck@irus.rri.uwo.ca>
  4564.                - Tunc Iyriboz        <iyriboz@dialup.francenet.fr>
  4565.                - Varun Mitroo        <mitroo@magnus.acs.ohio-state.edu>
  4566.                - Wayne Rasband       <wayne@helix.nih.gov>
  4567.                - Yuichi Kimura       <kimura@cit.nihon-u.ac.jp>
  4568.  
  4569. -- 
  4570. David A. Clunie (dclunie@flash.us.com)
  4571. In sunny Riyadh, Saudi Arabia.
  4572.